• 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 {
    
        }
    }

    演示

  • 相关阅读:
    做凭证时不显示货币
    凭证字段显示、保存布局等操作
    没有控制范围分配给公司代码
    拓端tecdat|R语言用Garch模型和回归模型对股票价格分析
    拓端tecdat|R语言混合图形模型MGM的网络可预测性分析
    拓端tecdat|R语言对推特twitter数据进行文本情感分析
    拓端tecdat|R语言广义线性模型GLM、多项式回归和广义可加模型GAM预测泰坦尼克号幸存者
    拓端tecdat|R语言:结构方程模型、潜变量分析
    拓端tecdat|R语言对股票风险“溃疡指数”( Ulcer Index)曲面图可视化
    django项目设置
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13328732.html
Copyright © 2020-2023  润新知