zoukankan      html  css  js  c++  java
  • 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. }  

  • 相关阅读:
    Linux内核链表——看这一篇文章就够了
    2的幂和按位与&——效率
    fgets注意事项
    GDB TUI
    GDB TUI
    linux shell命令行选项与参数用法详解
    What are the differences between Perl, Python, AWK and sed
    What is the difference between sed and awk
    /proc/sysrq-trigger
    C++ Sqlite3的基本使用
  • 原文地址:https://www.cnblogs.com/jpfss/p/9114960.html
Copyright © 2011-2022 走看看