5 回答
TA贡献1878条经验 获得超4个赞
Spring security 提供了一种在 http 配置器中配置 CORS 的方法,有一种更简洁的方法可以将 CORS 过滤器添加到应用程序中 -
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class MyCORSFilterClass implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");
chain.doFilter(req, res);
}
@Override
public void init(FilterConfig filterConfig) {
}
@Override
public void destroy() {
}
}
以最高优先级对过滤器进行排序可确保 javax.servlet.Filter 的 MyCORSFilterClassimplementation 是链中的第一个。
TA贡献1851条经验 获得超5个赞
尝试在本地方法中放置一个调试点
corsConfigurationSource()
并检查它是否正在执行。如果它没有被执行,请调查原因 - 可能通过启用 Spring 的调试日志和/或重新检查 Spring 配置。另外,尝试添加选项
setAllowedMethods
configuration.setAllowedMethods(ImmutableList.of("HEAD", "GET", "POST", "PUT", "DELETE", "PATCH", "OPTIONS"));
TA贡献1744条经验 获得超4个赞
响应403反映授权失败。您的服务器可能已设置为要求对选项请求进行授权。您必须确保选项配置为发送成功响应(2xx 状态代码),以允许浏览器发送实际请求。2xx 响应通知浏览器服务器处理 CORS 请求。
您的请求在本地有效的原因可能是您在提出请求时已获得授权。因此,请检查您的身份验证以确保其正确。因此,飞行前请求不会发送任何授权标头,因此您不应该在服务器端进行期望。
TA贡献1815条经验 获得超13个赞
Tomcat 也有自己的 cors 过滤器,如果您在 tomcat 之前使用其他服务器(例如 nodejs、apache 服务器 vs ),也请检查其 cors 过滤器。
添加回答
举报