SpringBoot注册登录(一):User表的设计点击打开链接

SpringBoot注册登录(二):注册---验证码kaptcha的实现点击打开链接

SpringBoot注册登录(三):注册--验证账号密码是否符合格式及后台完成注册功能点击打开链接

SpringBoot注册登录(四):登录功能--密码错误三次,需要等待2分钟才能登录,固定时间内不能登录点击打开链接

SpringBoot注册登录(五):登录功能--Scheduling Tasks定时作业,用于某个时间段允许/不允许用户登录点击打开链接

SpringBoot--mybatis--ajax--模态框--log:注册、登录、拦截器、文件系统源代码点击打开链接

直接运行程序,就会加载拦截器了。这个拦截器在没登录前只会放行登录注册、验证码的请求

一、先在启动类加上注解(如果使用了下面步骤的代码程序执行失败的话)

  1. @ComponentScan
  2. @EnableAutoConfiguration
  3. @EnableScheduling
  4. @Configuration
@ComponentScan
@EnableAutoConfiguration
@EnableScheduling
@Configuration

二、定义两个类

1、LoginInterceptor

  1. package com.fxy.interceptor;
  2. import com.fxy.bean.User;
  3. import com.fxy.service.UserService;
  4. import org.apache.log4j.Logger;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.stereotype.Component;
  8. import org.springframework.stereotype.Controller;
  9. import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. import javax.servlet.http.HttpSession;
  13. import java.util.ArrayList;
  14. import java.util.HashSet;
  15. import java.util.List;
  16. import java.util.Set;
  17. /**
  18. * 登录验证拦截
  19. *
  20. */
  21. @Controller
  22. @Component
  23. public class LoginInterceptor extends HandlerInterceptorAdapter {
  24. Logger log = Logger.getLogger(LoginInterceptor.class);
  25. /*@Autowired
  26. UserService userService;*/
  27. /*@Value("${IGNORE_LOGIN}")
  28. Boolean IGNORE_LOGIN;*/
  29. @Override
  30. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
  31. throws Exception {
  32. String basePath = request.getContextPath();
  33. String path = request.getRequestURI();
  34. //      log.info("basePath:"+basePath);
  35. //      log.info("path:"+path);
  36. if(!doLoginInterceptor(path, basePath) ){//是否进行登陆拦截
  37. return true;
  38. }
  39. //      HttpSession session = request.getSession();
  40. //      int userID = 2;
  41. //      UserInfo userInfo = sysUserService.getUserInfoByUserID(userID);
  42. //      System.out.println(JsonUtil.toJson(userInfo));
  43. //      session.setAttribute(Constants.SessionKey.USER, userInfo);
  44. //如果登录了,会把用户信息存进session
  45. HttpSession session = request.getSession();
  46. List<User> users =  (List<User>) session.getAttribute("userList");
  47. /*User userInfo = new User();
  48. userInfo.setId(users.get(0).getId());
  49. userInfo.setName(users.get(0).getName());
  50. userInfo.setPassword(users.get(0).getPassword());*/
  51. //开发环节的设置,不登录的情况下自动登录
  52. /*if(userInfo==null && IGNORE_LOGIN){
  53. userInfo = sysUserService.getUserInfoByUserID(2);
  54. session.setAttribute(Constants.SessionKey.USER, userInfo);
  55. }*/
  56. if(users==null){
  57. /*log.info("尚未登录,跳转到登录界面");
  58. response.sendRedirect(request.getContextPath()+"signin");*/
  59. String requestType = request.getHeader("X-Requested-With");
  60. //          System.out.println(requestType);
  61. if(requestType!=null && requestType.equals("XMLHttpRequest")){
  62. response.setHeader("sessionstatus","timeout");
  63. //              response.setHeader("basePath",request.getContextPath());
  64. response.getWriter().print("LoginTimeout");
  65. return false;
  66. } else {
  67. log.info("尚未登录,跳转到登录界面");
  68. response.sendRedirect(request.getContextPath()+"signin");
  69. }
  70. return false;
  71. }
  72. //      log.info("用户已登录,userName:"+userInfo.getSysUser().getUserName());
  73. return true;
  74. }
  75. /**
  76. * 是否进行登陆过滤
  77. * @param path
  78. * @param basePath
  79. * @return
  80. */
  81. private boolean doLoginInterceptor(String path,String basePath){
  82. path = path.substring(basePath.length());
  83. Set<String> notLoginPaths = new HashSet<>();
  84. //设置不进行登录拦截的路径:登录注册和验证码
  85. //notLoginPaths.add("/");
  86. notLoginPaths.add("/index");
  87. notLoginPaths.add("/signin");
  88. notLoginPaths.add("/login");
  89. notLoginPaths.add("/register");
  90. notLoginPaths.add("/kaptcha.jpg");
  91. notLoginPaths.add("/kaptcha");
  92. //notLoginPaths.add("/sys/logout");
  93. //notLoginPaths.add("/loginTimeout");
  94. if(notLoginPaths.contains(path)) return false;
  95. return true;
  96. }
  97. }
package com.fxy.interceptor;

import com.fxy.bean.User;

import com.fxy.service.UserService; import org.apache.log4j.Logger;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.beans.factory.annotation.Value;

import org.springframework.stereotype.Component;

import org.springframework.stereotype.Controller;

import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession; import java.util.ArrayList;

import java.util.HashSet;

import java.util.List;

import java.util.Set; /**
  • 登录验证拦截
*/

@Controller

@Component

public class LoginInterceptor extends HandlerInterceptorAdapter {
Logger log = Logger.getLogger(LoginInterceptor.class);

/*@Autowired
UserService userService;*/ /*@Value("${IGNORE_LOGIN}")
Boolean IGNORE_LOGIN;*/ @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String basePath = request.getContextPath();
String path = request.getRequestURI();

// log.info("basePath:"+basePath);

// log.info("path:"+path);

	if(!doLoginInterceptor(path, basePath) ){//是否进行登陆拦截
return true;
}

// HttpSession session = request.getSession();

// int userID = 2;

// UserInfo userInfo = sysUserService.getUserInfoByUserID(userID);

// System.out.println(JsonUtil.toJson(userInfo));

// session.setAttribute(Constants.SessionKey.USER, userInfo);

	//如果登录了,会把用户信息存进session
HttpSession session = request.getSession();
List&lt;User&gt; users = (List&lt;User&gt;) session.getAttribute("userList");
/*User userInfo = new User();
userInfo.setId(users.get(0).getId());
userInfo.setName(users.get(0).getName());
userInfo.setPassword(users.get(0).getPassword());*/
//开发环节的设置,不登录的情况下自动登录
/*if(userInfo==null &amp;&amp; IGNORE_LOGIN){
userInfo = sysUserService.getUserInfoByUserID(2);
session.setAttribute(Constants.SessionKey.USER, userInfo);
}*/
if(users==null){
/*log.info("尚未登录,跳转到登录界面");
response.sendRedirect(request.getContextPath()+"signin");*/ String requestType = request.getHeader("X-Requested-With");

// System.out.println(requestType);

if(requestType!=null && requestType.equals("XMLHttpRequest")){

response.setHeader("sessionstatus","timeout");

// response.setHeader("basePath",request.getContextPath());

response.getWriter().print("LoginTimeout");

return false;

} else {

log.info("尚未登录,跳转到登录界面");

response.sendRedirect(request.getContextPath()+"signin");

}

return false;

}

// log.info("用户已登录,userName:"+userInfo.getSysUser().getUserName());

return true;

}

/**
* 是否进行登陆过滤
* @param path
* @param basePath
* @return
*/
private boolean doLoginInterceptor(String path,String basePath){
path = path.substring(basePath.length());
Set&lt;String&gt; notLoginPaths = new HashSet&lt;&gt;();
//设置不进行登录拦截的路径:登录注册和验证码
//notLoginPaths.add("/");
notLoginPaths.add("/index");
notLoginPaths.add("/signin");
notLoginPaths.add("/login");
notLoginPaths.add("/register");
notLoginPaths.add("/kaptcha.jpg");
notLoginPaths.add("/kaptcha");
//notLoginPaths.add("/sys/logout");
//notLoginPaths.add("/loginTimeout"); if(notLoginPaths.contains(path)) return false;
return true;
}

}

2、WebConfig

  1. package com.fxy.interceptor;  
  2.   
  3.   
  4. import org.springframework.beans.factory.annotation.Autowired;  
  5. import org.springframework.context.annotation.Bean;  
  6. import org.springframework.context.annotation.Configuration;  
  7. import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;  
  8. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;  
  9. import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;  
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;  
  11. import org.springframework.web.servlet.view.InternalResourceViewResolver;  
  12. import org.springframework.web.servlet.view.JstlView;  
  13.   
  14. @Configuration  
  15. public class WebConfig extends WebMvcConfigurerAdapter {  
  16.   
  17.     //@Autowired  
  18.     //LogInterceptor logInterceptor;  
  19.   
  20.     @Autowired  
  21.     LoginInterceptor loginInterceptor;  
  22.   
  23.     / 
  24.       不需要登录拦截的url:登录注册和验证码 
  25.      /  
  26.     final String[] notLoginInterceptPaths = {"/signin","/login/","/index/","/register/","/kaptcha.jpg/","/kaptcha/"};//"/", "/login/", "/person/", "/register/", "/validcode", "/captchaCheck", "/file/", "/contract/htmltopdf", "/questions/", "/payLog/", "/error/" };  
  27.   
  28.     @Override  
  29.     public void addInterceptors(InterceptorRegistry registry) {  
  30.         // 日志拦截器  
  31.         //registry.addInterceptor(logInterceptor).addPathPatterns("/");  
  32.         // 登录拦截器  
  33.         registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);  
  34.     }  
  35.   
  36.     @Override  
  37.     public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {  
  38.         configurer.enable();  
  39.     }  
  40.   
  41.     @Bean  
  42.     public InternalResourceViewResolver viewResolver() {  
  43.         InternalResourceViewResolver resolver = new InternalResourceViewResolver();  
  44.         resolver.setPrefix("/templates/");  
  45.         resolver.setSuffix(".html");  
  46.         resolver.setViewClass(JstlView.class);  
  47.         return resolver;  
  48.     }  
  49.   
  50.     @Override  
  51.     public void addViewControllers(ViewControllerRegistry registry) {  
  52.   
  53.     }  
  54. }  
package com.fxy.interceptor;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;

import org.springframework.web.servlet.config.annotation.InterceptorRegistry;

import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;

import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

import org.springframework.web.servlet.view.InternalResourceViewResolver;

import org.springframework.web.servlet.view.JstlView; @Configuration

public class WebConfig extends WebMvcConfigurerAdapter {
//@Autowired
//LogInterceptor logInterceptor; @Autowired
LoginInterceptor loginInterceptor; /**
* 不需要登录拦截的url:登录注册和验证码
*/
final String[] notLoginInterceptPaths = {"/signin","/login/**","/index/**","/register/**","/kaptcha.jpg/**","/kaptcha/**"};//"/", "/login/**", "/person/**", "/register/**", "/validcode", "/captchaCheck", "/file/**", "/contract/htmltopdf", "/questions/**", "/payLog/**", "/error/**" }; @Override
public void addInterceptors(InterceptorRegistry registry) {
// 日志拦截器
//registry.addInterceptor(logInterceptor).addPathPatterns("/**");
// 登录拦截器
registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
} @Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
} @Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/templates/");
resolver.setSuffix(".html");
resolver.setViewClass(JstlView.class);
return resolver;
} @Override
public void addViewControllers(ViewControllerRegistry registry) { }

}

SpringBoot 拦截器--只允许进入登录注册页面,没登录不允许查看其它页面的更多相关文章

  1. Java结合SpringBoot拦截器实现简单的登录认证模块

    Java结合SpringBoot拦截器实现简单的登录认证模块 之前在做项目时需要实现一个简单的登录认证的功能,就寻思着使用Spring Boot的拦截器来实现,在此记录一下我的整个实现过程,源码见文章 ...

  2. Springboot 拦截器配置(登录拦截)

    Springboot 拦截器配置(登录拦截) 注意这里环境为springboot为2.1版本 1.编写拦截器实现类,实现接口   HandlerInterceptor, 重写里面需要的三个比较常用的方 ...

  3. 【SpringBoot】SpringBoot拦截器实战和 Servlet3.0自定义Filter、Listener

    =================6.SpringBoot拦截器实战和 Servlet3.0自定义Filter.Listener ============ 1.深入SpringBoot2.x过滤器Fi ...

  4. springboot拦截器HandlerInterceptor详解

    Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Spring提供的HandlerInterceptor(拦截器). HandlerInterceptor 的功能跟过滤器类似,但 ...

  5. SpringBoot 拦截器 && 拦截之后返回前台自定义格式

    1.加入 阿里的 json jar包 <!--json jar相关jar包--> <dependency> <groupId>com.fasterxml.jacks ...

  6. SpringBoot拦截器中Bean无法注入(转)

    问题 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于其他bean在service,controller层注入一点问题也没有,开始根本没意识到Be ...

  7. SpringBoot拦截器中无法注入bean的解决方法

    SpringBoot拦截器中无法注入bean的解决方法 在使用springboot的拦截器时,有时候希望在拦截器中注入bean方便使用 但是如果直接注入会发现无法注入而报空指针异常 解决方法: 在注册 ...

  8. Springboot拦截器未起作用

    之前遇到要使用springboot拦截器却始终未生效的状况,查了网上的博客,大抵都是@Component,@Configuration注解未加,或是使用@ComponentScan增加包扫描,但是尝试 ...

  9. SpringBoot拦截器中service或者redis注入为空的问题

    原文:https://my.oschina.net/u/1790105/blog/1490098 这两天遇到SpringBoot拦截器中Bean无法注入问题.下面介绍我的思考过程和解决过程: 1.由于 ...

随机推荐

  1. ionic之AngularJS扩展动态组件

    目录: 1. 模态对话框 : $ionicModal 2. 上拉菜单 : $ionicActionSheet 3. 弹出框 : $ionicPopup 4. 浮动框 : $ionicPopover 5 ...

  2. 解决phpmyadmin数据文件导入有限制的问题(只能导入2M以下)

    修改配置php.ini文件中三个参数: 1.upload_max_filesize 2.memory_limit 3.post_max_size 建议根据实际需要进行设置.

  3. linux下jdk环境变量配置深度分析----解决环境变量不生效的问题

    1.linux下jdk环境变量配置 是否需要配置环境变量,主要看java -version 显示的版本是否为你期望的版本 1.1 不需要配置环境变量的情况 使用java -version查看,版本显示 ...

  4. [NOI2003]Editor

    Description 很久很久以前,DOS3.x的程序员们开始对 EDLINEDLIN 感到厌倦. 于是,人们开始纷纷改用自己写的文本编辑器?? 多年之后,出于偶然的机会,小明找到了当时的一个编辑软 ...

  5. kafka的topic命名技巧

    不多说,直接上干货!    比如,我们给kafka的topic命名为user_r2p10 表示user这个topic的副本因子(r)是2,分区数(p)是10. 这样后期在写消费者代码的时候,根据top ...

  6. 上传txt文件编码格式判断(文本乱码解决方法)

    说明 通过ajax或者浏览上传文本文件,上传时候c#处理时候因为文本格式的创建不同,在获取内容时候会出现中文乱码. 解决方法 通过上传的文件流,判断文件的编码格式,在使用对应的编码格式获取文本内容 # ...

  7. Spring: (一) -- 春雨润物之 核心IOC

    作为一个Java人,想必都或多或少的了解过Spring.对于其优势也能道个一二,诸如方便解耦.支持AOP编程.支持声明式事务.方便测试等等.Spring也不仅仅局限于服务器端开发,它可以做非常多的事情 ...

  8. leetcode343 Integer Break

    思路: 将n不断拆分3出来直至其小于或等于4. 实现: class Solution { public: int integerBreak(int n) { ] = {, , , }; ) retur ...

  9. 鼠标拖拽移动Java界面组件

    默认的,Frame或者JFrame自身已经实现了鼠标拖拽标题栏移动窗口的功能. 只是,当你不满意java的JFrame样式,隐藏了标题栏和边框,又或者干脆直接使用JWindow,那你又该怎么实现鼠标拖 ...

  10. react Native环境 搭建

    react Native的优点:跨平台 低投入高回报 性能高 支持动态更新.一才两用(ios和Android) 开发成本第 代码复用率高.windows环境搭建react Native开发环境1.安装 ...