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

    演示

  • 相关阅读:
    远程连接Oracle 服务器 解决Oracle查询中文乱码
    sql 复杂查询 以teacher student course多对多关系为例
    ZooKeeper 分布式锁实现
    zookeeper原理解析-客户端与服务器端交互
    zookeeper原理解析-服务器端处理流程
    zookeeper原理解析-选举
    zookeeper原理解析-序列化
    深入浅出 Redis client/server交互流程
    zookeeper原理解析-数据存储
    RocketMQ原理解析-Remoting
  • 原文地址:https://www.cnblogs.com/chenyanbin/p/13328732.html
Copyright © 2011-2022 走看看