spring 拦截器的使用

@Component
@Slf4j
public class LoginInterceptor implements HandlerInterceptor {
    @Autowired
    LoginService loginService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        /**
         * 在执行controller方法(Handler)之前进行执行
         * 步骤:
         *      1,需要判断 请求的路径是否为HandlerMethod(controller方法)
         *      2,判断token是否为空,如果为空,则登录
         *      3,如果token不为空,登录验证loginService checkToken
         *      4,如果认证成功,放行
         */
        if(!(handler instanceof HandlerMethod)){  //handler是否为HandlerMethod类型
            //handle可能是RequestResourcesHandler springboot程序访问静态资源默认去classpath下的static目录
            //so如果Handler类型不是这个,就是静态资源文件,之间放行即可
            return true;
        }
        String token=request.getHeader("Authorization");
        log.info("=================request start===========================");
        String requestURI = request.getRequestURI();
        log.info("request uri:{}",requestURI);
        log.info("request method:{}",request.getMethod());
        log.info("token:{}", token);
        log.info("=================request end===========================");
        if (StringUtils.isBlank(token)){
            Result result=Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().println(JSON.toJSONString(result));
            return false;
        }
        SysUser sysUser = loginService.checkToken(token);
        if (sysUser==null){
            Result result=Result.fail(ErrorCode.NO_LOGIN.getCode(), ErrorCode.NO_LOGIN.getMsg());
            response.setContentType("application/json;charset=utf-8");
            response.getWriter().println(JSON.toJSONString(result));
            return false;
        }
        return true;
    }
}

然后在WebConfig中添加

@Autowired
    LoginInterceptor loginInterceptor;
@Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry
                .addInterceptor(loginInterceptor)
                .addPathPatterns("/**")    //添加要拦截的内容
                .excludePathPatterns("");  //排除不需要拦截的内容
    }
一起学java 文章被收录于专栏

分享平时学习心得及见解,还有学习笔记

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务