【问题标题】:Dropwizard 0.8 - enable CORSDropwizard 0.8 - 启用 CORS
【发布时间】:2015-06-16 19:46:35
【问题描述】:

有谁知道如何为 dropwizard 0.8 启用 CORS?我只能找到关于 0.7 版本的信息here

显然这不起作用

FilterRegistration.Dynamic filter = environment.servlets().addFilter(
                "CORS", CrossOriginFilter.class);
        // Add URL mapping
        filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class),
                true, "/*");
        filter.setInitParameter(CrossOriginFilter.ALLOWED_METHODS_PARAM,
                "GET,PUT,POST,DELETE,OPTIONS");
        filter.setInitParameter(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
        filter.setInitParameter(
                CrossOriginFilter.ACCESS_CONTROL_ALLOW_ORIGIN_HEADER, "*");
        filter.setInitParameter("allowedHeaders",
                "Content-Type,Authorization,X-Requested-With,Content-Length,Accept,Origin");
        filter.setInitParameter("allowCredentials", "true");

【问题讨论】:

  • 您是否尝试将 org.eclipse.jetty.servlets 的日志级别设置为 DEBUG ?

标签: java cors dropwizard


【解决方案1】:

以上应该可以。我用单元测试写了一个工作要点:https://gist.github.com/yunspace/07d80a9ac32901f1e149,它针对 0.8.1 和 0.9.0-SNAPSHOT 进行了测试。运行它作为参考。

如果您遇到问题,请尝试按照@elec 的建议将日志级别设置为 DEBUG:

loggers:
   org.eclipse.jetty.servlets: DEBUG

当 CrossOriginFilter 初始化时,它应该打印出以下日志条目:

DEBUG [2015-05-07 11:55:39,247] org.eclipse.jetty.servlets.CrossOriginFilter: Cross-origin filter configuration: allowedOrigins = *, allowedMethods = GET,PUT,POST,DELETE,OPTIONS, allowedHeaders = Origin, Content-Type, Accept, Authorization, preflightMaxAge = 1800, allowCredentials = true,exposedHeaders = ,chainPreflight = true

【讨论】:

    【解决方案2】:

    我已经为此苦苦挣扎了将近一周,我将在这里发布我的代码,对于那些感兴趣的人,基本上步骤是相同的​​: 1. 将其包含在您的应用程序类中 final FilterRegistration.Dynamic filter = environment.servlets().addFilter("CORSFilter", CrossOriginFilter.class);

        System.setProperty("sun.net.http.allowRestrictedHeaders", "true");
    
        //filter.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), false, environment.getApplicationContext().getContextPath() + "*");
        // Configure CORS parameters
        filter.setInitParameter("allowedOrigins", "*");
        filter.setInitParameter("allowedHeaders", "X-Requested-With,Content-Type,Accept,Origin");
        filter.setInitParameter("allowedMethods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
        // Add URL mapping
        filter.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
    
    1. 在对当前资源提供响应时,明确包括您的选项。

      return Response.status(status)
              .entity(new MessageResponse(this.counter.incrementAndGet(), message, response))
              .header("Access-Control-Allow-Origin", origin.isPresent() ? origin.get():"*")
              .header("Access-Control-Allow-Methods", methods)
              .header("Access-Control-Allow-Headers", "Content-Type, header-task")
              .type(MediaType.APPLICATION_JSON)
              .encoding("UTF-8")
              .allow(allow)
              .build();
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-02-25
      • 2015-06-12
      • 2016-03-17
      • 2015-12-11
      • 1970-01-01
      • 2014-08-24
      • 2014-09-26
      • 1970-01-01
      相关资源
      最近更新 更多