遇到CORS过滤器问题

时间:2016-12-22 12:04:38

标签: java spring cors

我在互联网上搜索了一整天。这是我在 web.xml

中包含的内容
<filter>
    <filter-name>cors</filter-name>
    <filter-class>org.sampe.service.context.filter.CorsFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>cors</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

这是Cors Filter(CorsFilter.java)

@Component
public class CorsFilter implements Filter {

   @Override
   public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
        throws IOException, ServletException {
      HttpServletResponse response = (HttpServletResponse) res;
      response.setHeader("Access-Control-Allow-Origin", "*");
      response.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, OPTIONS, DELETE");
      response.setHeader("Access-Control-Max-Age", "3600");
      response.setHeader("Access-Control-Allow-Headers",
            "Origin, X-Requested-With, Content-Type, Accept, Authorization");
      chain.doFilter(req, res);
   }  

   @Override
   public void init(FilterConfig filterConfig) {}

   @Override
   public void destroy() {}
}

它适用于邮递员。但我在制作ajax调用或使用角度2时遇到问题。我也查看了这些问题。 solved stackoverflow answer我的错了。

2 个答案:

答案 0 :(得分:1)

这与角度无关。 问题是你的spring API不允许交叉原始请求。

要允许从跨源访问您的API,您可以在其余控制器上设置注释。

我想说的是你可以用@CrossOrigin注释你的休息控制器,这样它就可以允许跨源访问。

希望这会有所帮助。 奖励

答案 1 :(得分:1)

您必须使用以下注释注释您的Cors过滤器:
@Order(Ordered.HIGHEST_PRECEDENCE)
 @Order定义带注释的组件的排序顺序。默认值为Ordered.LOWEST_PRECEDENCE,表示最低优先级(丢失到任何其他指定的订单值)。