麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 開發 > Java > 正文

JAVA通過Filter實現允許服務跨域請求的方法

2024-07-14 08:42:56
字體:
來源:轉載
供稿:網友

概念

 在 HTML 中,<a>, <form>, <img>, <script>, <iframe>, <link> 等標簽以及 Ajax 都可以指向一個資源地址, 而所謂的跨域請求就是指:當前發起請求的域與該請求指向的資源所在的域不一樣。

 這里的域指的是這樣的一個概念:我們認為若協議 + 域名 + 端口號均相同,那么就是同域即我們常說的瀏覽器請求的同源策略。

Jsonp

 在前后端分離的項目中,會經常遇到需要跨域請求的問題。跨域請求有多種方式。之前接觸過jsonp的方式。
 這種方式是在前端頁面進行跨域請求兼容性好,但安全性比較差,只支持GET請求。

CORS

 Cross-Origin Resource Sharing 即跨源資源共享 。是一個新的 W3C 標準,它新增的一組HTTP首部字段,允許服務端其聲明哪些源站有權限訪問哪些資源。

 也就是說它允許瀏覽器向聲明了 CORS 的跨域服務器,發出 XMLHttpReuest 請求,從而克服 Ajax 只能同源使用的限制。

Http頭部字段介紹

 Access-Control-Allow-Origin:響應首部中可以攜帶這個頭部表示服務器允許哪些域可以訪問該資源
 Access-Control-Allow-Methods:該首部字段用于預檢請求的響應,指明實際請求所允許使用的HTTP方法
 Access-Control-Allow-Headers:該首部字段用于預檢請求的響應。指明了實際請求中允許攜帶的首部字段
 Access-Control-Max-Age:該首部字段用于預檢請求的響應,指定了預檢請求能夠被緩存多久
 Access-Control-Allow-Credentials:該字段可選。它的值是一個布爾值,表示是否允許發送Cookie。默認情況下,Cookie不包括在CORS請求之中。設為true,即表示服務器明確許可,Cookie可以包含在請求中,一起發給服務器

具體實現

這里通過過濾器的方式對請求進行攔截。設置http的響應header來實現。

public class CrossFilter implements Filter {  protected Logger logger = LoggerFactory.getLogger(getClass());  @Override  public void init(FilterConfig filterConfig) throws ServletException {  }  @Override  public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {    HttpServletRequest request=(HttpServletRequest)servletRequest;    HttpServletResponse response=(HttpServletResponse)servletResponse;    logger.info("【允許跨域訪問】refererUrl【{}】", request.getHeader("Referer"));    //允許跨域訪問    response.setContentType("text/html;charset=UTF-8");    response.setHeader("Access-Control-Allow-Origin", "https://monline.01zhuanche.com");    response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");    response.setHeader("Access-Control-Max-Age", "0");    response.setHeader("Access-Control-Allow-Headers", "Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With,userId,Authorization,SessionToken,JSESSIONID,token");    response.setHeader("Access-Control-Allow-Credentials", "true");    response.setHeader("XDomainRequestAllowed","1");    filterChain.doFilter(request, response);  }  public static String getRefererUrl(HttpServletRequest request){    String returnValue = null;    if(request != null && !StringUtils.isEmpty(request.getHeader("Referer"))) {      returnValue = request.getHeader("Referer");      String[] urls = returnValue.split("/");      if(urls != null && urls.length > 3) {        returnValue = urls[0] + "//" + urls[2];      }    }    return returnValue;  }  @Override  public void destroy() {  }}

此外需要對我們的過濾器進行配置,在web.xml文件中添加如下配置:

<filter>  <filter-name>crossDomainFilter</filter-name>  <filter-class>com.open.advertise.api.cooperation.filter.CrossFilter</filter-class>  <init-param>   <param-name>targetFilterLifecycle</param-name>   <param-value>true</param-value>  </init-param> </filter> <filter-mapping>  <filter-name>crossDomainFilter</filter-name>  <url-pattern>/*</url-pattern> <!--可以針對某個接口進行限制--> </filter-mapping>

以上,對于設置的跨域請求的域名就可以進行跨域訪問啦。

以上所述是小編給大家介紹的JAVA通過Filter實現允許服務跨域請求,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JAVA教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 看黄在线 | 国产精品99久久久久久宅女 | 在线看免电影网站 | 国产成人av免费观看 | 欧美日在线观看 | 国产人成免费爽爽爽视频 | 欧美成年人在线视频 | 龙的两根好大拔不出去h | 成年人网站国产 | 久色porn| 美女擦逼| 亚洲射逼 | 日韩中文字幕三区 | 国产免费观看av | 精品一区二区在线播放 | 玩偶姐姐 在线观看 | 他也色在线视频 | 日本免费一区二区三区四区 | 欧美一级毛片一级毛片 | 福利在线免费视频 | 爱爱视频天天干 | 99欧美视频 | 久久久久一本一区二区青青蜜月 | 久久国产精品二区 | 青青操精品 | 美女黄污视频 | 毛片在线不卡 | 二区三区四区视频 | 在火车上摸两乳爽的大叫 | 亚洲特黄 | 国产亚洲精品一区二区三区 | 91精品视频在线看 | 色柚视频网站ww色 | 日本一区二区不卡高清 | 欧美人的天堂一区二区三区 | 欧美日韩爱爱视频 | 97se亚洲综合在线韩国专区福利 | 国产精品久久久久久影院8一贰佰 | 中文字幕一区在线观看视频 | 久久精品一区二区三区不卡牛牛 | 亚洲人成中文字幕在线观看 |