91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

springboot使用filter獲取自定義請求頭的實現代碼

發布時間:2020-08-26 12:45:03 來源:腳本之家 閱讀:210 作者:你都如何回憶我 欄目:編程語言

有個錢包項目,本來用的是微服務這一套,后來感覺沒必要,重構成了簡單的springboot項目,但是token校驗重構完之后出問題了,之前寫filter走的是springgateway,基于GatewayFilter實現,重構了之后基于filter,然后當請求進入過濾器的時候,發現不能獲取到請求的自定義請求頭。

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

原因

我在進入斷點的時候查看了一下servletRequest,發現請求方法是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);
  }
}

怎么還報跨域的問題呢,想起來了我的tokenFilter里因為拿不到請求頭token,我拋出了參數異常,然后@RestControllerAdvice跟@ExceptionHandle處理不了filter中拋出的異常,導致程序報500錯誤,然后過濾器是類似于切面的 么,這里斷了導致返回頭也沒加上。

處理

怎么處理瀏覽器發過來的預處理 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");
      ~~~~~~~

回想

我記得我上個項目也沒處理options請求啊,怎么沒報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);
  }
}

還是得多看源碼啊,我這個crudboy

總結

以上所述是小編給大家介紹的springboot使用filter獲取自定義請求頭的實現代碼,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南溪县| 赤壁市| 怀来县| 晋江市| 鄂尔多斯市| 临城县| 明溪县| 登封市| 贵州省| 陆川县| 吉首市| 衡阳市| 崇州市| 唐河县| 临泉县| 滨海县| 高邑县| 福海县| 枣阳市| 土默特左旗| 南乐县| 建德市| 揭东县| 屏东县| 建瓯市| 桑日县| 遂川县| 宽城| 鞍山市| 仁寿县| 鸡东县| 湘潭县| 筠连县| 正宁县| 子长县| 苗栗市| 喀喇| 汕尾市| 方正县| 富锦市| 南投县|