您的位置:首页 > 编程语言 > Java开发

欢迎使用CSDN-markdown编辑器

2016-12-07 19:40 302 查看

跨域问题

跨域问题: 配置跨域,安全性降低(最好是只允许特定域名跨域)

解决 办法有多种下面列举几种不依赖前端的解决办法:

1 . java 后端配置

在接口返回前增加

response.AddHeader(“Access-Control-Allow-Origin”, “*”);

如果要指定某个域名下,配置全域名,带http,如

response.AddHeader(“Access-Control-Allow-Origin”, “http://XXX.com“);

还可以在通用拦截器里配置

public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with");
return super.preHandle(request, response, handler);


}


2. web.xml配置(项目级别)

maven 配置

<dependency>
<groupId>com.thetransactioncompany</groupId>
<artifactId>cors-filter</artifactId>
<version>2.1.2</version>
</dependency>


web.xml 配置如下

<filter>
<filter-name>CORS</filter-name>
<filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
<init-param>
<param-name>cors.allowOrigin</param-name>
<param-value>*</param-value>
</init-param>
<init-param>
<param-name>cors.supportedMethods</param-name>
<param-value>GET, POST, HEAD, PUT, DELETE</param-value>
</init-param>
<init-param>
<param-name>cors.supportedHeaders</param-name>
<param-value>Accept, Origin, X-Requested-With, Content-Type, Last-Modified</param-value>
</init-param>
<init-param>
<param-name>cors.exposedHeaders</param-name>
<param-value>Set-Cookie</param-value>
</init-param>
<init-param>
<param-name>cors.supportsCredentials</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CORS</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>


3. tomcat 级别

在tomcat.6.0.27以上版本,跨域问题有简单解决方法:
在tomcat 的conf 目录下面 编辑:context.xml
将里面的Context修改为以下即可:


<ContextsessionCookiePath=""sessionCookieDomain=".×××.cn"/>


4. nginx 级别

在nginx.conf中配置

http {
......
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Headers X-Requested-With;
add_header Access-Control-Allow-Methods GET,POST,OPTIONS;
......
}


这样就可以实现GET,POST,OPTIONS的跨域请求的支持

也可以 add_header Access-Control-Allow-Origin http://test.XXX.com; –指定允许的url;

跨域不起作用常见问题:

设置跨域没有考虑所有出路

比如下面代码:

if( 2>1){
return 1;
}
response.addHeader("Access-Control-Allow-Origin", "*");
return 2;


方法在if正确条件下,跨域设置是不会起作用的

2. 设置了拦截器,接口进入了统一拦截器,导致跨域不起作用。

3. 接口设置必传参数,在进入接口,被spring拦截返回。

如:@RequestParam(value = "code", required = true),而前        端 没有传 code

4. 跨域配置有误。
如:


response.addHeader("Access-Control-Allow-Origin", "test.XXX.com");


正确的配置


response.addHeader("Access-Control-Allow-Origin", "http://test.XXX.com");
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  跨域 java