zoukankan      html  css  js  c++  java
  • yb课堂实战之LoginInterceptor注册和放行路径 《十二》

    LoginInterceptor 拦截器注册和路径校验配置

    • 继承WebMvcConfigurer
    • 配置拦截路径和放行路径

    InterceptorConfig.java

    package net.ybclass.online_ybclass.config;
    
    import net.ybclass.online_ybclass.interceptor.LoginInterceptor;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * 拦截器配置
     * 不用权限可以访问url /api/v1/pub/
     * 要登陆可以访问url /api/v1/pri/
     */
    @Configuration
    public class InterceptorConfig implements WebMvcConfigurer {
        @Bean
        LoginInterceptor loginInterceptor(){
            return new LoginInterceptor();
        }
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(loginInterceptor())
                    .addPathPatterns("/api/v1/pri/*/*/**")//配置拦截的路径
                    .excludePathPatterns("/api/v1/pri/user/login","/api/v1/pri/user/register"); //不拦截那些路径
            WebMvcConfigurer.super.addInterceptors(registry);
        }
    }

    LoginInterceptor.java

    package net.ybclass.online_ybclass.interceptor;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import io.jsonwebtoken.Claims;
    import net.ybclass.online_ybclass.utils.JWTUtils;
    import net.ybclass.online_ybclass.utils.JsonData;
    import org.apache.commons.lang3.StringUtils;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.PrintWriter;
    
    public class LoginInterceptor implements HandlerInterceptor {
        /**
         * 进入到Controller之前的方法
         *
         * @param request
         * @param response
         * @param handler
         * @return
         * @throws Exception
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            try {
                String accesToken = request.getHeader("token");
                if (accesToken == null) {
                    accesToken = request.getParameter("token");
                }
                if (StringUtils.isNoneBlank(accesToken)) {
                    Claims claims = JWTUtils.checkJWT(accesToken);
                    if (claims == null) {
                        sendJsonMessage(response, JsonData.buildError("登陆过期,请重新登陆"));
                        //告诉登陆过期,重新登陆
                        return false;
                    }
                    Integer id = (Integer) claims.get("id");
                    String name = (String) claims.get("name");
                    request.setAttribute("user_id", id);
                    request.setAttribute("name", name);
                    return true;
                }
            } catch (Exception e) {
            }
            //登陆失败
            sendJsonMessage(response, JsonData.buildError("登陆过期,请重新登陆"));
            return false;
        }
    
        /**
         * 响应json数据给前端
         * @param response
         * @param obj
         */
        public static void sendJsonMessage(HttpServletResponse response, Object obj) {
            try {
                ObjectMapper objectMapper=new ObjectMapper();
                response.setContentType("application/json;charset=utf-8");
                PrintWriter writer=response.getWriter();
                writer.print(objectMapper.writeValueAsString(obj));
                writer.close();
                writer.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }

    演示

  • 相关阅读:
    Scrapy 概览笔记
    Python 依赖版本控制 (requirements.txt 文件生成和使用)
    Python 虚拟空间的使用
    macOS 所有版本 JDK 安装指南 (with Homebrew)
    鉴权那些事
    Java 位运算符和 int 类型的实现
    ASP.NET Core 入门教程 5、ASP.NET Core MVC 视图传值入门
    如何做好一次知识或技术分享
    ASP.NET Core 入门教程 4、ASP.NET Core MVC控制器入门
    ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13328732.html
Copyright © 2011-2022 走看看