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

Spring boot中解决跨域问题

2017-06-21 17:37 736 查看
1、使用过滤器形式。配合Spring 自带Filter(CorsFilter )

  优雅起见在项目根目录新建 BeanConfiguration用于定义bean信息,如下:

@Configuration
public class BeanConfiguration {
private static final Logger LOG = Logger.getLogger(BeanConfiguration.class);

/**
* 解决跨域问题
* @return
*/
@Bean
public CorsFilter corsFilter() {
final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
final CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.setAllowCredentials(true);
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
urlBasedCorsConfigurationSource.registerCorsConfiguration("/rpc/**", corsConfiguration);
return new CorsFilter(urlBasedCorsConfigurationSource);
}

/**
* 开启方法参数校验
* @return
*/
@Bean
public MethodValidationPostProcessor parameterVerify(){
return new MethodValidationPostProcessor();
}
}

2、使用注解方式:@CrossOrigin 该注解可加到方法及类上 其中参数 origins 为可调用域名 如:

@RequestMapping(value = "getLandInfo")
@CrossOrigin(origins = "www.domain.com")
public RpcResponseEntity<VerifyAuthorityInfo> getLandInfo(String areaCode){

当然注解中还可以设置其他参数 可以自行百度或查看源码

3、使用jsonp 如下:

 $.ajax({

            type: "post",

            dataType: "jsonp",

            jsonp: "callback",

            url: "http://192.168.21.165:8080/prairie/manage/weather/getWeatherInfo",

            data: {weatherType: 'frostless', areaCode: '15070000'},

            success: function (result) {

                console.log(result);

            },

            error: function (err) {

                console.log("失败");

            }

        }); 
其中后台需要将 callback 做下处理 即将返回信息用callback包裹起来:比如返回字符串为 
{"invoke_result_code":"INVOKE_SUCCESS","invoke_result_message":"调用成功"} 则需处理为

callback(
{"invoke_result_code":"INVOKE_SUCCESS","invoke_result_message":"调用成功"}

注意callback 需要当做参数 在后台接取 即:

@RequestMapping(value = "getWeatherInfo",produces="application/javascript")
public String getWeatherInfo(@RequestParam("weatherType") String weatherType, @RequestParam("areaCode") String areaCode, String callback){
注意 chrome 调用需要将contentType设置为 application/javascript 否则会保错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: