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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM