dropwizard使用cors支持跨域浏览器取不到自定义header问题

  dropwizard支持cors的配置如下:

public void run(Configuration conf, Environment environment)  {
    // Enable CORS headers
    final FilterRegistration.Dynamic cors =
        environment.servlets().addFilter("CORS", CrossOriginFilter.class);

    // Configure CORS parameters
    cors.setInitParameter("allowedOrigins", "*");
    cors.setInitParameter("allowedHeaders", "X-Requested-With,Content-Type,Accept,Origin");
    cors.setInitParameter("allowedMethods", "OPTIONS,GET,PUT,POST,DELETE,HEAD");
    // Add URL mapping
    cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*");
}

  

  支持自定义header,需要加上allowedHeaders。否则在浏览器中的response header中可以看到自定义header,js却取不到值。

public void run(Configuration conf, Environment environment)  {
    // Enable CORS headers
    final FilterRegistration.Dynamic cors =
        environment.servlets().addFilter("CORS", CrossOriginFilter.class);

    // Configure CORS parameters
    cors.setInitParameter("allowedOrigins", "*");
    cors.setInitParameter("allowedHeaders", "X-Requested-With,Content-Type,Accept,Origin,X-Export-Result");
cors.setInitParameter("allowedHeaders", "X-Export-Result");
    cors.setInitParameter("allowedMethods", "OPTIONS,GET,PUT,POST,DELETE,HEAD"); 
// Add URL mapping
cors.addMappingForUrlPatterns(EnumSet.allOf(DispatcherType.class), true, "/*"); }

 

  CrossOriginFilter的几个参数的定义:

allowedOrigins
a comma separated list of origins that are allowed to access the resources. Default value is *, meaning all origins.
If an allowed origin contains one or more * characters (for example http://*.domain.com), then "*" characters are converted to ".*", "." characters are escaped to "\." and the resulting allowed origin interpreted as a regular expression.

Allowed origins can therefore be more complex expressions such as https?://*.domain.[a-z]{3} that matches http or https, multiple subdomains and any 3 letter top-level domain (.com, .net, .org, etc.).

allowedTimingOrigins
a comma separated list of origins that are allowed to time the resource. Default value is the empty string, meaning no origins.
The check whether the timing header is set, will be performed only if the user gets general access to the resource using the allowedOrigins.

allowedMethods
a comma separated list of HTTP methods that are allowed to be used when accessing the resources. Default value is GET,POST,HEAD
allowedHeaders
a comma separated list of HTTP headers that are allowed to be specified when accessing the resources. Default value is X-Requested-With,Content-Type,Accept,Origin. If the value is a single "*", this means that any headers will be accepted.
preflightMaxAge
the number of seconds that preflight requests can be cached by the client. Default value is 1800 seconds, or 30 minutes
allowCredentials
a boolean indicating if the resource allows requests with credentials. Default value is true
exposedHeaders
a comma separated list of HTTP headers that are allowed to be exposed on the client. Default value is the empty list
chainPreflight
if true preflight requests are chained to their target resource for normal handling (as an OPTION request). Otherwise the filter will response to the preflight. Default is true.

 

转载于:https://www.cnblogs.com/lnlvinso/p/9788203.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用CORS解决问题的具体方法包括:首先,在服务器端设置 Access-Control-Allow-Origin 允许请求;其次,在客户端使用 XMLHttpRequest 对象发起请求;最后,在服务器端返回 Access-Control-Allow-Origin 响应头,以允许访问。 ### 回答2: 问题是由于浏览器的同源策略引起的,为了解决这个问题,可以使用CORS(Cross-Origin Resource Sharing)来进行资源共享。CORS是一种机制,它允许网页服务器进行访问控制,从而使数据传输成为可能。 下面是使用CORS解决问题的具体方法: 1. 在服务端设置Access-Control-Allow-Origin响应头来指定允许的源,允许的值可以是具体的名、通配符(如*)或null。如果需要指定多个源,可以使用逗号分隔。 2. 如果请求需要携带身份凭证(如cookies、HTTP认证等),则还需要设置Access-Control-Allow-Credentials响应头为true。 3. 如果请求包含自定义的请求头字段,浏览器会首先发送一个预检请求(OPTIONS)来获服务器的CORS配置。服务器收到预检请求后,需要设置Access-Control-Allow-Methods响应头来指定允许的请求方法,以及Access-Control-Allow-Headers响应头来指定允许的请求头字段。 4. 可以通过设置Access-Control-Expose-Headers响应头来指定允许客户端访问的响应头字段。 5. 在客户端的XMLHttpRequest请求中需要设置withCredentials属性为true,以便允许携带身份凭证。 使用CORS可以灵活地控制资源的访问权限,提高了安全性,并且不需要使用代理或JSONP等其他方法来实现请求。但是需要注意的是,CORS只能解决部分问题,不支持文件上传和流媒体传输等。 ### 回答3: 请求是指在浏览器端,当网页的请求向不同名、不同端口号或不同协议的服务器发起时,会被浏览器拦截,这是为了保护用户的安全。为了解决问题,我们可以使用CORS(Cross-Origin Resource Sharing)。 CORS是一种通过在服务器端设置响应头来允许请求的机制。具体方法如下: 1. 在服务端设置响应头:在服务器端的API接口中设置`Access-Control-Allow-Origin`响应头,允许指定的名来访问该接口。例如,设置为`Access-Control-Allow-Origin: http://example.com`,表示只允许`http://example.com`名来访问该接口。 2. 处理预请求:对于带有特殊请求方法(例如DELETE、PUT等)或自定义头部的请求,浏览器会首先发起一个OPTIONS预请求,来确认服务器是否接受该请求。在服务器端的API接口中,需要对OPTIONS请求进行特殊处理,设置相关的响应头,例如`Access-Control-Allow-Methods`(允许的方法)和`Access-Control-Allow-Headers`(允许的头部)。 3. 处理携带凭证请求:对于需要在请求中携带用户凭证(如cookie、authorization等)的情况,需要在服务器端的API接口中设置`Access-Control-Allow-Credentials: true`,表示允许携带凭证。 4. 处理非简单请求:当请求方法为GET、POST、HEAD,并且没有自定义头部时,浏览器会发起简单请求,对于这种请求,服务器不需要额外设置响应头。 综上所述,使用CORS解决问题的具体方法包括在服务器端设置`Access-Control-Allow-Origin`响应头,处理OPTIONS预请求,设置`Access-Control-Allow-Methods`和`Access-Control-Allow-Headers`来处理特殊请求,以及设置`Access-Control-Allow-Credentials`来处理携带凭证请求。通过这些设置,可以实现请求的安全和可控访问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值