这是在Java中创建允许任何来源的CORS过滤器的好方法吗?
我需要在java中执行cors过滤器,并且我希望允许任何来源、头和方法,我创建以下过滤器:这是在Java中创建允许任何来源的CORS过滤器的好方法吗?,java,spring,servlet-filters,Java,Spring,Servlet Filters,我需要在java中执行cors过滤器,并且我希望允许任何来源、头和方法,我创建以下过滤器: @Component @Order(Ordered.HIGHEST_PRECEDENCE) public class CorsFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) t
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
resp.setHeader("Access-Control-Allow-Origin", req.getHeader("Origin"));
resp.setHeader("Access-Control-Allow-Credentials", "true");
if("OPTIONS".equals(req.getMethod())) {
resp.setHeader("Access-Control-Allow-Methods", req.getHeader("Access-Control-Request-Method"));
resp.setHeader("Access-Control-Allow-Headers", req.getHeader("Access-Control-Request-Headers"));
resp.setHeader("Access-Control-Max-Age", "3600");
resp.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(request, response);
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
我使用*
允许任何来源、标题和方法,但我需要从浏览器发送Cookie,当来源标题为*
时,浏览器在控制台中显示以下消息
当请求的凭据模式为“包括”时,响应中的“访问控制允许来源”标头的值不得为通配符“*”
因此,我使用请求中的“Origin”
头作为访问控制允许Origin的值代码>
如果我同时收到来自多个来源的请求,这种方法是否有效?通过接受任何来源,你基本上打破了CORS的概念,你让每个人都使用你的服务(好的,你有身份验证,但也有可能遭到DOS攻击)
CORS的想法是让你的前端只谈论一些特定的(你的)后端
该漏洞适用于以下情况:有人将注入一些恶意javascript,希望使用一些丑陋的后端,或者一些外国javascript希望使用您的后端服务
我希望这能帮助你,
干杯接受任何来源,你基本上打破了CORS的概念,让每个人都可以使用你的服务(好的,你有auth,但也有可能遭到DOS攻击)
CORS的想法是让你的前端只谈论一些特定的(你的)后端
该漏洞适用于以下情况:有人将注入一些恶意javascript,希望使用一些丑陋的后端,或者一些外国javascript希望使用您的后端服务
我希望这能帮助你,
干杯是的,假设请求中有Origin
头,这将起作用。要了解更全面的处理方法,我建议您看看Spring的:
是的,假设请求中有Origin
头,这将起作用。要了解更全面的处理方法,我建议您看看Spring的:
@Nullable
public String checkOrigin(@Nullable String requestOrigin) {
if (!StringUtils.hasText(requestOrigin)) {
return null;
}
if (ObjectUtils.isEmpty(this.allowedOrigins)) {
return null;
}
if (this.allowedOrigins.contains(ALL)) {
if (this.allowCredentials != Boolean.TRUE) {
return ALL;
}
else {
return requestOrigin;
}
}
for (String allowedOrigin : this.allowedOrigins) {
if (requestOrigin.equalsIgnoreCase(allowedOrigin)) {
return requestOrigin;
}
}
return null;
}