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. 【hdu多校联考第二场】Odd Shops

    Description 这道题的题意是这道难读,大概就是给你n个商店,每个商店的重量为i的商品用ai表示,对于任意商店的a数列都是相同的,重量的范围为[1,10] 求购买方案总数为奇数的重量一共有多少 ...

  2. DHTML_____window对象属性

    <html> <head> <meta charset="utf-8"> <title>window对象属性</title&g ...

  3. Matlab vs Python 作图

    -- Matlab 作图示例 x=-3:0.00003:3; y1=sin(x)./x; y2=x./sin(x); plot(x,y1,x,y2); -- Python 作图示例 import nu ...

  4. MySql数据查询中 left join 条件位置区别

    /*A 和 B 两张表都只有一个 ID 字段 比如A表的数据为 ID 1,2,3,4,5,6 B表的数据为 ID 1,2,3 判断 JOIN 查询时候条件在 ON 和 WHERE 时的区别 ON 和 ...

  5. ubuntu查看系统资源占用(内存,cpu和进程)

    http://blog.csdn.net/vivian187/article/details/51476043 http://bluexp29.blog.163.com/blog/static/338 ...

  6. Raspberry Pi开发之旅-控制蜂鸣器演奏乐曲

    一.无源蜂鸣器和有源蜂鸣器 步进电机以及无源蜂鸣器这些都需要脉冲信号才能够驱动,这次尝试用GPIO的PWM接口驱动无源蜂鸣器弹奏一曲<一闪一闪亮晶晶>. 无源蜂鸣器: 无源内部没有震荡源, ...

  7. IDEA打可执行jar包

    流程: 1. File ->Project Structure -> Artifacts -> + -> JAR -> From modules with depende ...

  8. ORA-01033:ORACLE initialization or shutdown in process

    Oracle遇到问题 :在PL/SQL当输入用户名和密码后 竟然出现标题上错误,我一项目数据库数据库全都没有备份,还有很多很多数据,该不会让我重装数据库吧,想到这个我汗那个流啊. 在网上查了下 看了看 ...

  9. 分布式缓存系统Memcached[分享]

    个人网站:http://www.51pansou.com memcached视频下载:memcached视频教程 memcached源码下载:memcached源码 Memcached是什么? Mem ...

  10. 前端JavaScript入门——JavaScript变量和操作元素

    变量JavaScript 是一种弱类型语言,javascript的变量类型由它的值来决定. 定义变量需要用关键字 ‘var’: var a = 123; var b = 'asd'; //同时定义多个 ...