@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(""); //排除不需要拦截的内容
}