服务器端解决跨域问题的三种方法

来源:互联网 发布:思维导图软件 编辑:程序博客网 时间:2024/05/29 19:55

跨域是指html文件所在的服务器与ajax请求的服务器是不同的ip+port,例如: 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.2:8080’是不同的域。 
- ‘192.168.1.1:8080’ 与 ‘192.168.1.1:8081’是不同的域。

解决此类问题的方法很多,有需要客户端和服务端都要更改的,例如jsonp,iframe等等;有只需要客户端更改的,这种情况只能出现在hybrid app开发中,即通过调用native方法来进行网络请求;有只需要服务端配置的,下面介绍3种服务端配置的方法。

第一种

如果您使用的mvc框架是spring4.2以上的话,一个@CrossOrigin就可以搞定。将@CrossOrigin加到Controller上,那么这个Controller所有的请求都是支持跨域的,代码如下:

@Controller@CrossOriginpublic class GreetingController {
  • 1
  • 2
  • 3

将@CrossOrigin加到请求方法上,那么这个请求是支持跨域的,代码如下

@CrossOrigin    @RequestMapping("/greeting")    public @ResponseBody Greeting greeting(@RequestParam(required=false, defaultValue="World") String name) {
  • 1
  • 2
  • 3

更详细的@CrossOrigin介绍,请参看这里

第二种

全局配置,也需要spring4.2以上。

    @Bean    public WebMvcConfigurer corsConfigurer() {        return new WebMvcConfigurerAdapter() {            @Override            public void addCorsMappings(CorsRegistry registry) {                registry.addMapping("/greeting-javaconfig").allowedOrigins("http://localhost:9000");            }        };    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

.addCorsMappings()中的参数代表支持跨域的url,.allowedOrigins()中的参数代表可以访问该接口的域名,设置为”*”可支持所有域。

第三种

这种方法就跟框架无关了,需要两个jar包,点击这里进行下载,两个jar包可以放的程序里,也可以放到tomcat中,然后将下面的配置写到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 >   
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
 
阅读全文
0 0