/**
* 登录信息拦截验证,判断用户登录状态是否有效
*
* @package: com.i2f.training.common.interceptor
* @author:
* @date: 2020/3/6 12:40
*/
@Component
public class LoginInterceptor implements HandlerInterceptor {
@Override
/** Controller执行之前。 返回true 请求继续执行 返回false请求结束,不再执行 我们需要自行返回数据到前端*/
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
String token = request.getHeader("token");
ServletOutputStream outputStream = response.getOutputStream();
if (StringUtils.isBlank(token)) {
ResultMessage<Object> objectResultMessage = new ResultMessage<>(Constants.Code.NO_AUTH, "无token,用户登录状态异常", null);
outputStream.write(JSON.toJSONBytes(objectResultMessage));
outputStream.flush();
outputStream.close();
return false;
}
if (!TokenUtils.isTokenValid(token)) {
ResultMessage<Object> objectResultMessage = new ResultMessage<>(Constants.Code.NO_AUTH, "在线状态已失效,请重新登录", null);
outputStream.write(JSON.toJSONBytes(objectResultMessage));
outputStream.flush();
outputStream.close();
return false;
}
request.setAttribute("userId", TokenUtils.getUserIdByToken( token));
return true;
}
}
以上实现拦截器拦截指定的访问,判断前端传的token的有效性,可以在webconfig里配置拦截指定的访问可如下:
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor).addPathPatterns("/**")
.excludePathPatterns("/login")
.excludePathPatterns("/register")
.excludePathPatterns("/findMobile")
.excludePathPatterns("/**/getCode")//排除拦截项
.excludePathPatterns("/test")
.excludePathPatterns("/post")
.excludePathPatterns("/get");
}
下一篇进行指定的放大的应用和每个细节以及底层实现。
-----------------------------------end---------------------