欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

理論指導(dǎo)

問(wèn):Spring Boot怎么配置攔截器?

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

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

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

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

具體代碼:

MyInterceptor.java

public class MyInterceptor implements HandlerInterceptor {

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

  /**
   * postHandle是在請(qǐng)求執(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è)請(qǐng)求執(zhí)行完畢后執(zhí)行
   */
  @Override
  public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse,
      Object o, Exception e) throws Exception {
  }

}

RegisterInterceptor.java

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

攔截效果

更新

跨域訪(fǎng)問(wèn)

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

URL
說(shuō)明
是否允許通信
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
域名和域名對(duì)應(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這種情況下也不允許訪(fǎng)問(wèn))
http://www.cnblogs.com/a.js
http://www.a.com/b.js
不同域名
不允許

上面代碼是可以實(shí)現(xiàn)攔截器基本功能,但是這樣是不可以跨域訪(fǎng)問(wèn)的,前端請(qǐng)求接口會(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è)置請(qǐng)求頭Access-Control-Allow-Origin為“*”或者設(shè)置為和request相同的Origin。

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

  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;
  }

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

相關(guān)文章

  • Java基礎(chǔ)之?dāng)?shù)組詳解

    Java基礎(chǔ)之?dāng)?shù)組詳解

    這篇文章主要介紹了Java基礎(chǔ)之?dāng)?shù)組詳解,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)java的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-04-04
  • 使用webmagic實(shí)現(xiàn)爬蟲(chóng)程序示例分享

    使用webmagic實(shí)現(xiàn)爬蟲(chóng)程序示例分享

    這篇文章主要介紹了使用webmagic實(shí)現(xiàn)爬蟲(chóng)程序示例,需要的朋友可以參考下
    2014-04-04
  • java中找不到符號(hào)的解決方案

    java中找不到符號(hào)的解決方案

    這篇文章主要介紹了java中找不到符號(hào)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • java集合中l(wèi)ist的用法代碼示例

    java集合中l(wèi)ist的用法代碼示例

    這篇文章主要介紹了java集合中l(wèi)ist的用法代碼示例,分享了相關(guān)代碼,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-11-11
  • idea運(yùn)行程序報(bào)錯(cuò)java程序包org.junit不存在解決辦法

    idea運(yùn)行程序報(bào)錯(cuò)java程序包org.junit不存在解決辦法

    這篇文章主要給大家介紹了關(guān)于idea運(yùn)行程序報(bào)錯(cuò)java程序包org.junit不存在的解決辦法, 當(dāng)出現(xiàn)程序包org.junit不存在的問(wèn)題時(shí),可以通過(guò)使用適當(dāng)?shù)腏Unit版本、添加依賴(lài)或重新下載程序包等方式進(jìn)行解決,需要的朋友可以參考下
    2024-02-02
  • Java導(dǎo)出CSV文件的方法

    Java導(dǎo)出CSV文件的方法

    這篇文章主要為大家詳細(xì)介紹了Java導(dǎo)出CSV文件的方法,分頁(yè)查詢(xún)大數(shù)據(jù)量,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • springboot?aop里的@Pointcut()的配置方式

    springboot?aop里的@Pointcut()的配置方式

    這篇文章主要介紹了springboot?aop里的@Pointcut()的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • SpringBoot環(huán)境屬性占位符解析和類(lèi)型轉(zhuǎn)換方式

    SpringBoot環(huán)境屬性占位符解析和類(lèi)型轉(zhuǎn)換方式

    這篇文章主要介紹了SpringBoot環(huán)境屬性占位符解析和類(lèi)型轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Spring事務(wù)管理配置文件問(wèn)題排查

    Spring事務(wù)管理配置文件問(wèn)題排查

    這篇文章主要介紹了Spring事務(wù)管理配置文件問(wèn)題排查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-05-05
  • SpringBoot接口數(shù)據(jù)加解密實(shí)戰(zhàn)記錄

    SpringBoot接口數(shù)據(jù)加解密實(shí)戰(zhàn)記錄

    現(xiàn)今對(duì)于大多數(shù)公司來(lái)說(shuō),信息安全工作尤為重要,下面這篇文章主要給大家介紹了關(guān)于SpringBoot接口數(shù)據(jù)加解密的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07

最新評(píng)論