服務端解決跨域問題的方案(一)

轉自: http://blog.csdn.net/james_wade63/article/details/50772041

跨域是指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
@CrossOrigin
public class GreetingController {

    將@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");
                }
            };
        }

    .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 >   
    發表評論
    所有評論
    還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
    相關文章