今天写代码的时候,发现放在header里的token一直拿不到,其实是因为浏览器会有一次预检
只要我们在过滤器里遇到这个OPTIONS请求预检放行,就可以的
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
System.out.println(request.getMethod());
//查看这次请求是不是OPTIONS,如果是就直接放行
if (!"OPTIONS".equals(request.getMethod())) {
String token = request.getHeader("token");
System.out.println(token);
if (token != null) {
User user = TokenUtil.tokenDecode(token);
String status = user.getStatus();
if ("1".equals(status)) {
System.out.println("正常");
filterChain.doFilter(servletRequest, servletResponse);
} else {
System.out.println("用户状态异常");
throw new BaseException(BaseErrorEnum.USER_NAME_LOCK);
}
} else {
System.out.println("用户未登录");
throw new BaseException(BaseErrorEnum.USER_NOLOGIN);
}
}else {
System.out.println("放行1次");
filterChain.doFilter(servletRequest, servletResponse);
}
}