java实现跨域请求的两种方式
1、方式一:使用jquery的jsonp请求,这种请求已经和ajax有本质的区别,具体的可以自行百度区别,这里直接讲如何使用。

2、function (index) { //点击确定后执行的方法体
debugger;
$.ajax({
type : "GET",
url : 'http://******:8081/ldap/updateStatus',
data : {
id : id
},
dataType : "jsonp",
jsonp:'statuscallback',
success : function(data) {
debugger;
layer.msg("处理完成!");
layer.close(index); //执行完后关闭
ajaxRequest(1, true)
}
});
});

3、这里是jsonp的后端代码,主要是拼接参数。statuscallback是在前端设置的方法名,这里直接获取。拼接参数,其余的交由浏览器去处理。
@RequestMapping(value = "/updateStatus")
@ResponseBody
public String updateStatus(@RequestParam("statuscallback") String callback,String id){
ServiceResult<String> result= EmplErrorService.updateStatus(id);
return callback+"("+JSON.toJSONString(result)+")";
}

4、方法二:cors解决跨域问题,原理可以自行百度,这里直接是实例。spring4以后对cors有支持,之前的版本是没有的。这里需要注意。

5、直接继承CorsFilter,创建MyCorsFilter。
public class MyCorsFilter extends CorsFilter {
public MyCorsFilter() {
super(configurationSource());
}
private static UrlBasedCorsConfigurationSource configurationSource() {
// CORS授权
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
config.addAllowedOrigin("*");
config.addAllowedHeader("*");
config.addAllowedMethod("*");
config.addExposedHeader(HttpHeaders.SET_COOKIE);
config.setMaxAge(3600L);
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", config);
return source;
}
}

6、配置web.xml使之生效。
<filter>
<filter-name>CORS</filter-name>
<filter-class>com.iflytek.psdataservice.filter.MyCorsFilter</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,hash,ticket</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>

7、前端的ajax请求直接是和平时非跨域请求一致的。此实例亲测有效,可以直接复制代码使用。

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
阅读量:135
阅读量:67
阅读量:75
阅读量:89
阅读量:87