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 文章被收录于专栏
分享平时学习心得及见解,还有学习笔记