欢迎使用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");
相关文章推荐
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器ss
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器