【问题标题】:Cross origin resource sharing with tomcat sever与tomcat服务器跨域资源共享
【发布时间】:2013-04-01 09:23:53
【问题描述】:

我想允许对我的服务器的跨源请求。 我找到了以下过滤代码:

public class CorsFilter implements Filter {
  // For security reasons set this regex to an appropriate value
  // example: ".*example\\.com"
  private static final String ALLOWED_DOMAINS_REGEXP = ".*";

  public void doFilter(ServletRequest servletRequest,
      ServletResponse servletResponse, FilterChain filterChain)
      throws IOException, ServletException {

    HttpServletRequest req = (HttpServletRequest) servletRequest;
    HttpServletResponse resp = (HttpServletResponse) servletResponse;

    String origin = req.getHeader("Origin");

    if (origin != null && origin.matches(ALLOWED_DOMAINS_REGEXP)) {
          System.out.println("CorsFilter:: origin matches, yey");
      resp.addHeader("Access-Control-Allow-Origin", origin);

      if ("options".equalsIgnoreCase(req.getMethod())) {

        resp.setHeader("Allow", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
        if (origin != null) {
          String headers = req.getHeader("Access-Control-Request-Headers");
          String method = req.getHeader("Access-Control-Request-Method");
          resp.addHeader("Access-Control-Allow-Methods", method);
          resp.addHeader("Access-Control-Allow-Headers", headers);
          resp.setContentType("text/plain");
        }
        resp.getWriter().flush();
        return;
      }
    }

    // Fix ios6 caching post requests
    if ("post".equalsIgnoreCase(req.getMethod())) {
      resp.addHeader("Cache-Control", "no-cache");
    }

    if (filterChain != null) {
      filterChain.doFilter(req, resp);
    }
  }

  @Override public void destroy() {}
  @Override public void init(FilterConfig arg0) throws ServletException {}
}

似乎只有在首先有一个 OPTIONS 请求时它才会做任何事情。但是,就我而言,我没有看到任何 OPTIONS 请求,而只有一个 GET 请求。我错过了什么吗?解决办法是什么?

【问题讨论】:

    标签: tomcat cross-domain cors


    【解决方案1】:

    从 Tomcat 7.0.41 开始,您可以通过 built-in filter 控制 CORS 行为。

    几乎您唯一需要做的就是在 CATALINA_HOME/conf 中编辑全局 web.xml 并添加过滤器定义:

    ... CorsFilterorg.apache.catalina.filters.CorsFilter过滤器> CorsFilter/*

    【讨论】:

      猜你喜欢
      • 2012-03-25
      • 1970-01-01
      • 2013-05-12
      • 1970-01-01
      • 2011-05-07
      • 2013-01-12
      • 2018-05-04
      • 2011-07-05
      • 2011-07-31
      相关资源
      最近更新 更多