站長資訊網
        最全最豐富的資訊網站

        SpringBoot攔截器實現登錄攔截

        SpringBoot攔截器可以做什么

        可以對URL路徑進行攔截,可以用于權限驗證、解決亂碼、操作日志記錄、性能監控、異常處理等。

        SpringBoot攔截器實現登錄攔截

        SpringBoot攔截器實現登錄攔截

        pom.xml:

        <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">     <modelVersion>4.0.0</modelVersion>     <parent>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-parent</artifactId>         <version>2.0.0.RELEASE</version>         <relativePath/>     </parent>     <groupId>com.wyj</groupId>     <artifactId>springboot-interceptor01</artifactId>     <version>0.0.1-SNAPSHOT</version>     <name>springboot-interceptor01</name>     <description>springboot攔截器</description>      <properties>         <java.version>1.8</java.version>     </properties>      <dependencies>         <!-- springboot -->         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-web</artifactId>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-test</artifactId>             <scope>test</scope>         </dependency>         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-devtools</artifactId>             <scope>runtime</scope>             <optional>true</optional>         </dependency>          <!-- lombok -->         <dependency>             <groupId>org.projectlombok</groupId>             <artifactId>lombok</artifactId>             <optional>true</optional>         </dependency>          <!-- thymeleaf -->         <dependency>             <groupId>org.springframework.boot</groupId>             <artifactId>spring-boot-starter-thymeleaf</artifactId>         </dependency>     </dependencies>      <build>         <finalName>springboot-interceptor01</finalName>         <plugins>             <plugin>                 <groupId>org.springframework.boot</groupId>                 <artifactId>spring-boot-maven-plugin</artifactId>             </plugin>         </plugins>     </build> </project>

        WebMvcConfigurer:繼承WebMvcConfigurationSupport類,重寫addInterceptors方法

        /**  * 在springboot2.0.0之后,WebMvcConfigurerAdapter已經過時了  * 會使用WebMvcConfigurer或者WebMvcConfigurationSupport替代  *  * @author wyj  * @create 2019-06-01 21:48  */ @Configuration public class WebMvcConfigurer extends WebMvcConfigurationSupport {      /**      * 在springboot2.0.0之前繼承WebMvcConfigurerAdapter類,重寫addInterceptors方法      *      * @param registry      */ //    @Override //    public void addInterceptors(InterceptorRegistry registry) { //        /** //         * 攔截器按照順序執行,如果不同攔截器攔截存在相同的URL,前面的攔截器會執行,后面的攔截器將不執行 //         */ //        registry.addInterceptor(new AuthorityInterceptor()) //                .addPathPatterns("/user/**"); //        super.addInterceptors(registry); //    }      /**      * 在springboot2.0.0之后實現WebMvcConfigurer接口,重寫addInterceptors方法      *      * @param registry      */ //    @Override //    public void addInterceptors(InterceptorRegistry registry) { //        /** //         * 攔截器按照順序執行,如果不同攔截器攔截存在相同的URL,前面的攔截器會執行,后面的攔截器將不執行 //         */ //        registry.addInterceptor(new AuthorityInterceptor()) //                .addPathPatterns("/user/**"); //    }      /**      * 在springboot2.0.0之后繼承WebMvcConfigurationSupport類,重寫addInterceptors方法      *      * @param registry      */     @Override     protected void addInterceptors(InterceptorRegistry registry) {         /**          * 攔截器按照順序執行,如果不同攔截器攔截存在相同的URL,前面的攔截器會執行,后面的攔截器將不執行          */         registry.addInterceptor(new AuthorityInterceptor())                 .addPathPatterns("/user/**");         super.addInterceptors(registry);     } }

        AuthorityInterceptor:實現HandlerInterceptor接口,重寫preHandlepostHandleafterCompletion方法

        preHandle:在請求處理之前進行調用(Controller方法調用之前)

        postHandle:請求處理之后進行調用,但是在視圖被渲染之前(Controller方法調用之后)

        afterCompletion:在整個請求結束之后被調用,也就是在DispatcherServlet 渲染了對應的視圖之后執行(主要是用于進行資源清理工作)

        @Slf4j public class AuthorityInterceptor implements HandlerInterceptor {      private static final Set<String> NOT_INTERCEPT_URI = new HashSet<>();//不攔截的URI      static {         NOT_INTERCEPT_URI.add("/user/login.html");         NOT_INTERCEPT_URI.add("/user/login");     }      /**      * 在請求處理之前進行調用(Controller方法調用之前)      */     @Override     public boolean preHandle(HttpServletRequest request, HttpServletResponse response,                              Object object) throws Exception {         String uri = request.getRequestURI();         if (NOT_INTERCEPT_URI.contains(uri)) {             log.info("不攔截" + uri);             return true;         }         log.info("攔截" + uri);         HttpSession session = request.getSession();         UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");         if (userInfo == null) {             throw new RuntimeException("用戶未登陸");         }         return true;     }      /**      * 請求處理之后進行調用,但是在視圖被渲染之前(Controller方法調用之后)      */     @Override     public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView mv) throws Exception {     }      /**      * 在整個請求結束之后被調用,也就是在DispatcherServlet 渲染了對應的視圖之后執行      * (主要是用于進行資源清理工作)      */     @Override     public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception ex) throws Exception {     } }

        UserController:

        @Controller @RequestMapping(value = "/user") public class UserController {      @RequestMapping(value = "/login.html")     public String index() {         return "login";     }      @RequestMapping(value = "/login")     public String login(User user) {         //查詢數據庫,我這里直接寫死         User dbUser = new User(1, "zhangsan", "123456", "admin");         if (dbUser.getPassword().equals(user.getPassword())) {             UserInfo userInfo = new UserInfo(dbUser.getId(), dbUser.getUsername(), dbUser.getRole());             HttpSession session = getRequest().getSession();             session.setAttribute("user_info_in_the_session", userInfo);             return "admin";         }         return "login";     }      @RequestMapping(value = "/userInfo")     @ResponseBody     public String userInfo() {         HttpSession session = getRequest().getSession();         UserInfo userInfo = (UserInfo) session.getAttribute("user_info_in_the_session");         return userInfo.toString();     }      private HttpServletRequest getRequest() {         return ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();     } }

        User:

        @Data @NoArgsConstructor @AllArgsConstructor public class User implements Serializable {      private int id;     private String username;     private String password;     private String role;  }

        UserInfo: 用于存在用戶信息儲存在session中

        @Data @NoArgsConstructor @AllArgsConstructor public class UserInfo implements Serializable {      private int id;     private String username;      private String role;  }

        login.html:只是一個很簡單的登錄表單

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>登陸頁面</title> </head> <body> <form action="/user/login" method="post">     登陸:<br/>     用戶名:<input name="username" id="username" type="text"/><br/>     密&nbsp;&nbsp;&nbsp;碼:<input name="password" id="password" type="password"/><br/>     <input type="submit" value="登陸"/> </form> </body> </html>

        admin.html:

        <!DOCTYPE html> <html> <head>     <meta charset="UTF-8">     <title>首頁</title> </head> <body> <form action="/user/userInfo" method="get">     <input type="submit" value="用戶信息"/></form> </body> </html>

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: www.99精品| 国产精品福利片免费看 | 国产精品人人爽人人做我的可爱 | 99国产欧美精品久久久蜜芽| 精品久久久久中文字幕一区| 69久久夜色精品国产69| 亚洲精品国自产拍在线观看| 成人国产精品一区二区视频| 国产成人精品免费视频网页大全| 亚洲综合精品香蕉久久网| 精品一久久香蕉国产线看播放| 国产精品一级片| 国产精品一区二区av| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 麻豆精品视频在线观看91| 国产成人精品久久一区二区三区 | 精品国精品国产| 精品人妻中文字幕有码在线| 欧美激情精品久久久久久久九九九| 2023国产精品自拍| 国产欧美久久久精品| 国产精品免费大片| 久久精品一本到99热免费| 亚洲线精品一区二区三区| 欧美激情精品久久久久久| 久久精品国产只有精品66 | 国产成人高清精品一区二区三区 | 国产麻豆精品久久一二三| 亚洲精品乱码久久久久久自慰| 国产亚州精品女人久久久久久| 亚洲国产精品久久久久久| 精品精品国产高清a毛片牛牛| 成人无码精品1区2区3区免费看| 免费精品无码AV片在线观看| 亚洲国产精品高清久久久| 亚洲中文字幕久久精品无码喷水 | 国产精品无码一区二区在线观一| 欧美精品一本久久男人的天堂| 国产成人精品日本亚洲直接| heyzo高无码国产精品| 99国产欧美精品久久久蜜芽|