一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

Spring 3.1 MVC REST 支持之跨域訪問(wèn)(Cross

 風(fēng)_宇星 2015-03-26

關(guān)于跨域資源訪問(wèn)請(qǐng)參考 http://en./wiki/Cross-origin_resource_sharing ,基本原理是在Spring Controller的每一個(gè)請(qǐng)求返回的時(shí)候都加上Access-Control-...header,需要注意的是并不是所有的瀏覽器都支持這些header,使用之前要先了解清楚。

實(shí)現(xiàn)起來(lái)也很簡(jiǎn)單那就是Interceptor,代碼如下:

  1. public class AccessKeyInterceptor extends HandlerInterceptorAdapter {  
  2.   
  3.     private static Log log=LogFactory.getLog(AccessKeyInterceptor.class);  
  4.       
  5.     @Autowired  
  6.     private IAccessService accessService;  
  7.       
  8.     private String accessKeyParameterName="accessKey";  
  9.     private List<String> defaultAccessAllowedFrom;  
  10.       
  11.     @Override  
  12.     public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {  
  13.         String accessKey=request.getParameter(accessKeyParameterName);  
  14.         String referer = request.getHeader("Referer");  
  15.         URL u = new URL(referer);  
  16.         String host = u.getHost().toLowerCase();  
  17.         if(accessKey==null){  
  18.             log.error("====================================ILLEGAL ACCESS: ACCESS_KEY_MISSING!=======================");  
  19.         }else{  
  20.             log.debug("====================================ACCESS WITH Access KEY:"+accessKey+"====================");  
  21.             IAccess access = accessService.getAccess(UserSessionUtils.getUserSession(request), accessKey);  
  22.             if(access!=null){  
  23.                 defaultAccessAllowedFrom=access.getAccessAllowedFrom();  
  24.             }else{  
  25.                 log.warn("======================================ACCESS KEY:"+accessKey+" DOES NOT EXIST!=================");      
  26.             }  
  27.         }  
  28.         for(String s : defaultAccessAllowedFrom) {  
  29.             if(host.matches(s)){                              
  30.                 response.setHeader("Access-Control-Allow-Origin", referer);  
  31.                 break;  
  32.             }  
  33.         }  
  34.         response.setHeader("Access-Control-Allow-Headers", "Content-Type");  
  35.         response.setHeader("Access-Control-Allow-Methods", "GET");  
  36.         response.setHeader("Allow", "GET");  
  37.         return true;  
  38.     }  
  39.       
  40.     public List<String> getDefaultAccessAllowedFrom() {  
  41.         return defaultAccessAllowedFrom;  
  42.     }  
  43.   
  44.     public void setDefaultAccessAllowedFrom(List<String> defaultAccessAllowedFrom) {  
  45.         this.defaultAccessAllowedFrom = defaultAccessAllowedFrom;  
  46.     }  
  47.   
  48.     public String getAccessKeyParameterName() {  
  49.         return AccessKeyParameterName;  
  50.     }  
  51.   
  52.     public void setAccessKeyParameterName(String accessKeyParameterName) {  
  53.         this.AccessKeyParameterName = AccessKeyParameterName;  
  54.     }  
  55. }  
其中defaultAccessAllowedFrom是在Spring的配置文件中,主要的配置默認(rèn)授權(quán)訪問(wèn)的url,如下:

  1. <property name="defaultAccessAllowedFrom">  
  2.     <list>  
  3.         <value>(.+\.)?(domain\.com)$</value>  
  4.         <value>(.+\.)?(192\.168\.0\.10)$</value>  
  5.     </list>  
  6. </property>  

但是由于Spring默認(rèn)Controller是不處理OPTIONS的請(qǐng)求的,所以必須在web.xml中打開(kāi),如下:

  1. <servlet>    
  2.    <servlet-name>application</servlet-name>    
  3.    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>  
  4.    <init-param>  
  5.         <param-name>dispatchOptionsRequest</param-name>  
  6.         <param-value>true</param-value>  
  7.    </init-param>    
  8.    <load-on-startup>1</load-on-startup>    
  9. </servlet>    
  10. <servlet-mapping>    
  11.    <servlet-name>application</servlet-name>    
  12.    <url-pattern>/</url-pattern>   
  13. </servlet-mapping>    

這樣當(dāng)請(qǐng)求時(shí)POST的時(shí)候前段就會(huì)自動(dòng)先請(qǐng)求OPTIONS,得到許可后就可以跨域訪問(wèn)POST請(qǐng)求了。一般我們會(huì)在OPTIONS的方法中加上"Allow: OPTIONS,GET,POST"類似header以區(qū)分于普通的請(qǐng)求。


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多

    国产又粗又长又爽又猛的视频| 青青操在线视频精品视频| 日本理论片午夜在线观看| 91久久精品国产成人| 不卡中文字幕在线视频| 国产精品日韩欧美一区二区| 成人日韩视频中文字幕| 97精品人妻一区二区三区麻豆| 成人你懂的在线免费视频| 91在线爽的少妇嗷嗷叫| 亚洲一区二区三区四区性色av| 日韩黄片大全免费在线看| 少妇熟女亚洲色图av天堂| 九九热这里只有精品哦| 欧美成人免费视频午夜色| 国产成人人人97超碰熟女| 国产女优视频一区二区| 一区二区三区精品人妻| 欧美三级精品在线观看| 日本一本不卡免费视频| 日本本亚洲三级在线播放| 色婷婷日本视频在线观看 | 美日韩一区二区精品系列| 黑丝国产精品一区二区| 在线亚洲成人中文字幕高清| 中文久久乱码一区二区| 久久99夜色精品噜噜亚洲av| 大屁股肥臀熟女一区二区视频| 国产精品成人免费精品自在线观看| 欧美精品中文字幕亚洲| 日本最新不卡免费一区二区| 欧美日韩黑人免费观看| 一区二区三区日韩经典| 国产一区二区不卡在线视频| 日本办公室三级在线观看| 大香蕉再在线大香蕉再在线| 麻豆蜜桃星空传媒在线观看| 久久精品一区二区少妇| 日韩精品免费一区二区三区| 日本一本在线免费福利| 成人国产激情福利久久|