@Component
@Order(-1)
@SuppressWarnings("all")
public class CORSFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(
HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
response.addHeader("Access-Control-Allow-Origin", "*");
response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
response.addHeader("Access-Control-Allow-Headers", "*");
response.setHeader("Access-Control-Expose-Headers", "*");
//30 min
response.addHeader("Access-Control-Max-Age", "1800");
//
if (request.getMethod().equals("OPTIONS")) {
response.setStatus(HttpStatus.OK.value());
}
filterChain.doFilter(request, response);
}
}
之前配置跨域请求过滤器之后在谷歌 IE都能正确请求 但是火狐显示
在百度查一下发现配置火狐security.fileuri.strict_origin_policy没有效果
后来查看了
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/CORS/Errors/CORSMissingAllowHeaderFromPreflight
之后发现可能是火狐要求安全性比较高
Access-Control-Allow-Headers对应值为*时校验不通过
改为
response.addHeader("Access-Control-Allow-Headers", "Authorization, Content-Type, Depth,User-Agent, X-File-Size, X-Requested-With, X-Requested-By, If-Modified-Since, X-File-Name, X-File-Type, Cache-Control, Origin");
等 将头信息具体参数都要在里边声明一下
亲测有效