最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot配置攔截器及實(shí)現(xiàn)跨域訪問的方法

 更新時(shí)間:2018年12月18日 14:50:44   作者:湖人總冠軍  
這篇文章主要介紹了Spring Boot配置攔截器及實(shí)現(xiàn)跨域訪問的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

攔截器功能強(qiáng)大,能夠深入方法前后,常應(yīng)用于日志記錄、權(quán)限檢查和性能檢測等,幾乎是項(xiàng)目中不可或缺的一部分,本文就來實(shí)現(xiàn)Spring Boot自定義攔截器的配置。

理論指導(dǎo)

問:Spring Boot怎么配置攔截器?

答:配置一個(gè)攔截器需要兩步完成。

  1. 自定義攔截器,實(shí)現(xiàn)HandlerInterceptor這個(gè)接口。這個(gè)接口包括三個(gè)方法,preHandle是請求執(zhí)行前執(zhí)行的,postHandler是請求結(jié)束執(zhí)行的,但只有preHandle方法返回true的時(shí)候才會(huì)執(zhí)行,afterCompletion是視圖渲染完成后才執(zhí)行,同樣需要preHandle返回true,該方法通常用于清理資源等工作。
  2. 注冊攔截器。 作用是確定攔截器和攔截的URL。需要繼承WebMvcConfigurationSupport并重寫addInterceptor方法,WebMvcConfigureAdapter已經(jīng)過時(shí)了?。?/li>

代碼實(shí)現(xiàn)

目錄結(jié)構(gòu):

具體代碼:

MyInterceptor.java

public class MyInterceptor implements HandlerInterceptor {

  /**
   * preHandle在執(zhí)行Controller之前執(zhí)行,返回true,則繼續(xù)執(zhí)行Contorller
   * 返回false則請求中斷。
   */
  @Override
  public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o)
      throws Exception {
    //只有返回true才會(huì)繼續(xù)向下執(zhí)行,返回false取消當(dāng)前請求 
    long startTime = System.currentTimeMillis();
    httpServletRequest.setAttribute("startTime", startTime);
    return true;
  }

  /**
   * postHandle是在請求執(zhí)行完,但渲染ModelAndView返回之前執(zhí)行
   */
  @Override
  public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o,
      ModelAndView modelAndView) throws Exception {
    long startTime = (Long) httpServletRequest.getAttribute("startTime");
    long endTime = System.currentTimeMillis();
    long executeTime = endTime - startTime;
    StringBuilder sb = new StringBuilder(1000);
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    String date = simpleDateFormat.format(new Date());
    sb.append("-----------------------").append(date).append("-------------------------------------\n");
    sb.append("URI    : ").append(httpServletRequest.getRequestURI()).append("\n");
    sb.append("CostTime : ").append(executeTime).append("ms").append("\n");
    sb.append("-------------------------------------------------------------------------------");
    System.out.println(sb.toString());
  }

  /**
   * afterCompletion是在整個(gè)請求執(zhí)行完畢后執(zhí)行
   */
  @Override
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
      Object o, Exception e) throws Exception {
  }

}

RegisterInterceptor.java

/**
 * 繼承WebMvcConfigurationSupport繼承并重寫addInterceptor方法用于注冊攔截器
 * WebMvcConfigureAdapter已經(jīng)過時(shí)了??!
 */
@Configuration
public class RegisterInterceptor extends WebMvcConfigurationSupport {
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    super.addInterceptors(registry);
  }
}

攔截效果

更新

跨域訪問

由于JavaScript同源策略,凡是發(fā)送請求url的協(xié)議、域名、端口三者之間任意一與當(dāng)前頁面地址不同即為跨域。具體的看下表

URL
說明
是否允許通信
http://www.a.com/a.js
http://www.a.com/b.js
同一域名下
允許
http://www.a.com/lab/a.js
http://www.a.com/script/b.js
同一域名下不同文件夾
允許
http://www.a.com:8000/a.js
http://www.a.com/b.js
同一域名,不同端口
不允許
http://www.a.com/a.js
https://www.a.com/b.js
同一域名,不同協(xié)議
不允許
http://www.a.com/a.js
http://70.32.92.74/b.js
域名和域名對應(yīng)ip
不允許
http://www.a.com/a.js
http://script.a.com/b.js
主域相同,子域不同
不允許
http://www.a.com/a.js
http://a.com/b.js
同一域名,不同二級(jí)域名(同上)
不允許(cookie這種情況下也不允許訪問)
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名
不允許

上面代碼是可以實(shí)現(xiàn)攔截器基本功能,但是這樣是不可以跨域訪問的,前端請求接口會(huì)有報(bào)錯(cuò):XMLHttpRequest cannot loadhttp://xxx/. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

解決方案是設(shè)置請求頭Access-Control-Allow-Origin為“*”或者設(shè)置為和request相同的Origin。

①在攔截器中添加一個(gè)設(shè)置請求頭的方法。

  public void crossDomain(HttpServletRequest request, HttpServletResponse response) {
    response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
    response.setHeader("Access-Control-Allow-Credentials", "true");
  }

②在preHandle中調(diào)用這個(gè)方法。

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
      throws Exception {
    crossDomain(request, response);
    long startTime = System.currentTimeMillis();
    request.setAttribute("startTime", startTime);
    return true;
  }

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 詳解Spring Boot Profiles 配置和使用

    詳解Spring Boot Profiles 配置和使用

    本篇文章主要介紹了詳解Spring Boot Profiles 配置和使用,具有一定的參考價(jià)值,有興趣的可以了解一下
    2017-06-06
  • spring級(jí)聯(lián)屬性賦值的兩種方式解析

    spring級(jí)聯(lián)屬性賦值的兩種方式解析

    這篇文章主要介紹了spring級(jí)聯(lián)屬性賦值的兩種方式解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • 基于java Files類和Paths類的用法(詳解)

    基于java Files類和Paths類的用法(詳解)

    下面小編就為大家分享一篇基于java Files類和Paths類的用法詳解,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-11-11
  • Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    Java創(chuàng)建數(shù)組的幾種方式總結(jié)

    下面小編就為大家?guī)硪黄狫ava創(chuàng)建數(shù)組的幾種方式總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-10-10
  • MyBatis-Plus 樂觀鎖的具體實(shí)現(xiàn)

    MyBatis-Plus 樂觀鎖的具體實(shí)現(xiàn)

    MyBatis-Plus 的樂觀鎖通過簡單的配置和注解,可以輕松實(shí)現(xiàn)高并發(fā)場景下的數(shù)據(jù)并發(fā)控制,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-09-09
  • MyBatis 與 Spring 的完美整合方法

    MyBatis 與 Spring 的完美整合方法

    MyBatis 和 Spring 兩大框架已經(jīng)成了 Java 互聯(lián)網(wǎng)技術(shù)主流框架組合,它們經(jīng)受住了大數(shù)據(jù)量和大批量請求的考驗(yàn),在互聯(lián)網(wǎng)系統(tǒng)中得到了廣泛的應(yīng)用。這篇文章主要介紹了MyBatis 與 Spring 整合,需要的朋友可以參考下
    2018-04-04
  • 基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解

    基于Java中進(jìn)制的轉(zhuǎn)換函數(shù)詳解

    下面小編就為大家?guī)硪黄贘ava中進(jìn)制的轉(zhuǎn)換函數(shù)詳解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔

    SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔

    在多人協(xié)作的開發(fā)過程中,API文檔不僅可以減少等待,也能保證開發(fā)的持續(xù)進(jìn)行,這篇文章主要給大家介紹了關(guān)于SpringBoot如何優(yōu)雅的整合Swagger Api自動(dòng)生成文檔的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • JavaWeb 實(shí)現(xiàn)多個(gè)文件壓縮下載功能

    JavaWeb 實(shí)現(xiàn)多個(gè)文件壓縮下載功能

    文件下載時(shí),我們可能需要一次下載多個(gè)文件,批量下載文件時(shí),需要將多個(gè)文件打包為zip,然后再下載。本文給大家分享實(shí)現(xiàn)思路及具體實(shí)現(xiàn)代碼,對javaweb實(shí)現(xiàn)文件壓縮下載功能感興趣的朋友一起學(xué)習(xí)吧
    2017-07-07
  • Spring?Security如何為用戶示例添加角色詳解

    Spring?Security如何為用戶示例添加角色詳解

    目前我正在用Java開發(fā)一個(gè)基于Spring Boot的web應(yīng)用程序,下面這篇文章主要給大家介紹了關(guān)于Spring?Security如何為用戶示例添加角色的相關(guān)資料,需要的朋友可以參考下
    2022-10-10

最新評(píng)論

门头沟区| 梓潼县| 云霄县| 龙山县| 阜新| 铜山县| 阿克苏市| 应城市| 卫辉市| 从江县| 扬州市| 呼和浩特市| 吴桥县| 肃宁县| 巩留县| 扶余县| 镇原县| 涿州市| 陆良县| 阿勒泰市| 平陆县| 三原县| 冕宁县| 建阳市| 葵青区| 望城县| 文化| 隆子县| 林州市| 山东省| 旌德县| 都江堰市| 朝阳市| 巫山县| 平安县| 宜章县| 柳林县| 甘孜县| 富平县| 康定县| 罗平县|