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. 关于Webpack的的认识及傻瓜式教学

    刚学习了Webpack,ememememememememem就赶脚是一个打包工具,将js.css.json.img等等通通打包为最终的文件,最后渲染为一个页面. 也是终于捋清了Webpack的思路,在 ...

  2. Winform执行CMD命令

    1.首先分享CmdHelper类: using System; using System.Collections.Generic; using System.Text; using System.Di ...

  3. 思维/构造 HDOJ 5353 Average

    题目传送门 /* 思维/构造:赛后补的,当时觉得3题可以交差了,没想到这题也是可以做的.一看到这题就想到了UVA_11300(求最小交换数) 这题是简化版,只要判断行不行和行的方案就可以了,做法是枚举 ...

  4. Node“getTextContent() is undefined for the type Node”处理办法

    最近一个项目在MyEclipse导入后总是报getTextContent() is undefined for the type Node错误. 经过查找原来是因为Node类为JDK中自带的(org. ...

  5. JD笔试

    题目表述: 给定n道题目,以及每道题目答对的概率,问小明能及格的概率. 样例: 40 50 50 50 50 0.31250 思路: 递归枚举对的题目个数,最后TLE之过40%: 知道正确解法是DP, ...

  6. 387 First Unique Character in a String 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1.案例:s = "leetcode"返回 0.s = "loveleetcode&qu ...

  7. 26 c#类的组合

    组合即将各个部分组合在一起.程序设计中就是用已有类的对象来产生新的类. 桌子由木板和钉子组合而成,台灯使用灯座,灯管,电线,接头等拼起来的.我们发现自己周围的很多东西都是由更小的其它东西拼凑构成的,就 ...

  8. Spring Boot (27) actuator服务监控与管理

    actuaotr是spring boot项目中非常强大的一个功能,有助于对应用程序进行监控和管理,通过restful api请求来监管.审计.收集应用的运行情况,针对微服务而言它是必不可少的一个环节. ...

  9. Intellij 下 mybatis 插件 MyBatisCodeHelperPro破解

    步骤1.破解包下载地址:https://gitee.com/pengzhile/MyBatisCodeHelper-Pro-Crack/releases 步骤2.下载:Intellij IDEA  p ...

  10. 接口与抽象类的区别-Java

    概念-抽象类: 类是对某一个对象的具体描述,抽象类则是对有共通之处的对象,描述共通之处的类;包含抽象方法的类一定的抽象类,抽象类并不一定包含抽象方法;抽象类中可以有数据成员,但数据成员必须是stati ...