SpringBoot 拦截器--只允许进入登录注册页面,没登录不允许查看其它页面

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

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

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

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

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

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




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

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

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


二、定义两个类

    1、LoginInterceptor

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



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. }  

posted @ 2018-05-31 09:43  星朝  阅读(15675)  评论(2编辑  收藏  举报