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

springboot使用filter獲取自定義請求頭的實(shí)現(xiàn)代碼

 更新時(shí)間:2019年05月24日 14:56:09   作者:你都如何回憶我  
這篇文章主要介紹了springboot使用filter獲取自定義請求頭的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

有個(gè)錢包項(xiàng)目,本來用的是微服務(wù)這一套,后來感覺沒必要,重構(gòu)成了簡單的springboot項(xiàng)目,但是token校驗(yàn)重構(gòu)完之后出問題了,之前寫filter走的是springgateway,基于GatewayFilter實(shí)現(xiàn),重構(gòu)了之后基于filter,然后當(dāng)請求進(jìn)入過濾器的時(shí)候,發(fā)現(xiàn)不能獲取到請求的自定義請求頭。

String token = request.getHeader("token"); // null
String id = request.getHeader("id"); // null
String role = request.getHeader("role"); // null

原因

我在進(jìn)入斷點(diǎn)的時(shí)候查看了一下servletRequest,發(fā)現(xiàn)請求方法是options。 我知道get post delete put。還真不了解options,百度了下。主要參考這篇文章。原來是瀏覽器的同源策略問題,也就是cors,可我一想,我配置了cors啊

@Configuration
public class CorsConfig {
  private CorsConfiguration buildConfig() {
    CorsConfiguration corsConfiguration = new CorsConfiguration();
    corsConfiguration.addAllowedOrigin("*"); // 1
    corsConfiguration.addAllowedHeader("*"); // 2
    corsConfiguration.addAllowedMethod("*"); // 3
    return corsConfiguration;
  }

  @Bean
  public CorsFilter corsFilter() {
    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
    source.registerCorsConfiguration("/**", buildConfig()); // 4
    return new CorsFilter(source);
  }
}

怎么還報(bào)跨域的問題呢,想起來了我的tokenFilter里因?yàn)槟貌坏秸埱箢^token,我拋出了參數(shù)異常,然后@RestControllerAdvice跟@ExceptionHandle處理不了filter中拋出的異常,導(dǎo)致程序報(bào)500錯(cuò)誤,然后過濾器是類似于切面的 么,這里斷了導(dǎo)致返回頭也沒加上。

處理

怎么處理瀏覽器發(fā)過來的預(yù)處理 options請求呢,太懶了,直接這樣寫了

HttpServletRequest request= (HttpServletRequest)servletRequest;
    HttpServletResponse res = (HttpServletResponse) servletResponse;
    String method=request.getMethod();
    if(HttpMethod.OPTIONS.toString().equals(method)){
      res.setStatus(HttpStatus.NO_CONTENT.value());
    }else {
      String token = request.getHeader("token");
      String id = request.getHeader("id");
      String role = request.getHeader("role");
      ~~~~~~~

回想

我記得我上個(gè)項(xiàng)目也沒處理options請求啊,怎么沒報(bào)cors問題啊,對了我記得我在nginx處理過了

if ($request_method = 'OPTIONS') {
 return 204;
}
add_header Access-Control-Allow-Origin * always;
add_header Access-Control-Allow-Headers "Content-Type, Authorization" always;
add_header Access-Control-Allow-Methods "GET, POST, OPTIONS, PUT, PATCH, DELETE, HEAD" always;
add_header Access-Control-Max-Age 86400 always;

原來自己又寫前端,也寫后端,怎么這些問題還能碰到呢,:relieved:,前輩們都寫好了,自己還沒遇到問題也沒深入過,還有springcloud里面的corsWebFilter怎么就跟springboot里面的corsFilter不一樣呢。

@Configuration
public class CorsConfig {
  @Bean
  public CorsWebFilter corsFilter() {
    CorsConfiguration config = new CorsConfiguration();
    config.addAllowedMethod("*");
    config.addAllowedOrigin("*");
    config.addAllowedHeader("*");

    UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(new PathPatternParser());
    source.registerCorsConfiguration("/**", config);

    return new CorsWebFilter(source);
  }
}

還是得多看源碼啊,我這個(gè)crudboy

總結(jié)

以上所述是小編給大家介紹的springboot使用filter獲取自定義請求頭的實(shí)現(xiàn)代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • idea創(chuàng)建properties文件,解決亂碼問題

    idea創(chuàng)建properties文件,解決亂碼問題

    這篇文章主要介紹了idea創(chuàng)建properties文件,解決亂碼問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • MyBatis增刪改查快速上手

    MyBatis增刪改查快速上手

    這篇文章給大家講解的是MyBatis 這門技術(shù)的 CURD (增刪改查) ,非常的詳細(xì)與實(shí)用,有需要的小伙伴可以參考下
    2020-02-02
  • 基于springboot微信公眾號開發(fā)(微信自動(dòng)回復(fù))

    基于springboot微信公眾號開發(fā)(微信自動(dòng)回復(fù))

    這篇文章主要介紹了基于springboot微信公眾號開發(fā)(微信自動(dòng)回復(fù)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • java中關(guān)于文本文件的讀寫方法實(shí)例總結(jié)

    java中關(guān)于文本文件的讀寫方法實(shí)例總結(jié)

    這篇文章主要介紹了java中關(guān)于文本文件的讀寫方法,實(shí)例總結(jié)了Java針對文本文件讀寫的幾種常用方法,并對比了各個(gè)方法的優(yōu)劣及特點(diǎn),具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-11-11
  • SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    SpringBoot整合RabbitMQ的5種模式的注解綁定詳解

    這篇文章主要介紹了SpringBoot整合RabbitMQ的5種模式的注解綁定詳解,RabbitMQ 是一個(gè)消息中間件,它接收消息并且轉(zhuǎn)發(fā),是"消費(fèi)-生產(chǎn)者模型"的一個(gè)典型的代表,一端往消息隊(duì)列中不斷的寫入消息,而另一端則可以讀取或者訂閱隊(duì)列中的消息,需要的朋友可以參考下
    2024-01-01
  • Java并發(fā)編程學(xué)習(xí)之ThreadLocal源碼詳析

    Java并發(fā)編程學(xué)習(xí)之ThreadLocal源碼詳析

    這篇文章主要給大家介紹了關(guān)于Java并發(fā)編程學(xué)習(xí)之源碼分析ThreadLocal的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • Java連接操作Oracle數(shù)據(jù)庫代碼詳解

    Java連接操作Oracle數(shù)據(jù)庫代碼詳解

    這篇文章主要介紹了Java連接操作Oracle數(shù)據(jù)庫代碼詳解的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • JAVA浮點(diǎn)數(shù)計(jì)算精度損失底層原理與解決方案

    JAVA浮點(diǎn)數(shù)計(jì)算精度損失底層原理與解決方案

    本文主要介紹了JAVA浮點(diǎn)數(shù)計(jì)算精度損失底層原理與解決方案。具有很好的參考價(jià)值,下面跟著小編一起來看下吧
    2017-02-02
  • springcloud使用Hystrix進(jìn)行微服務(wù)降級管理

    springcloud使用Hystrix進(jìn)行微服務(wù)降級管理

    這篇文章主要介紹了springcloud使用Hystrix進(jìn)行微服務(wù)降級管理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 詳解JVM之運(yùn)行時(shí)常量池

    詳解JVM之運(yùn)行時(shí)常量池

    JVM在運(yùn)行的時(shí)候會(huì)對class文件進(jìn)行加載,鏈接和初始化的過程。class文件中定義的常量池在JVM加載之后會(huì)發(fā)生什么神奇的變化呢?快來看一看吧。
    2021-06-06

最新評論