No thread-bound request found


最近在給同事調試項目時,發現一個問題,在Security Success 回調邏輯中調用RequestContextHolder.currentRequestAttributes() 出現報錯:

caused by :java.lang.IllegalStateException: No thread-bound request found: 
  Are you referring to request attributes outside of an actual web request, or processing a request outside of the originally receiving thread? 
If you are actually operating within a web request and still receive this message, your code is probably running outside of DispatcherServlet: 
In this case, use RequestContextListener or RequestContextFilter to expose the current request.

 

出現這個問題時,根據字面意思以為是回調的Request不在同一個線程,也與其他項目進行了比較,依舊無果,浪費了不少腦細胞。。。

 

在Debug跟進代碼查看時發現沒有加載RequestContextFilter(在SpringBoot中@EnableAutoConfiguration會創建該對象)對象,又翻了一遍項目發現配置了@EnableWebMvc + extends WebMvcConfigurationAdapter,這個會使SpringBoot的@EnableAutoConfiguration失效,----- 問題找到啦 👏👏👏

 

因為有些項目需要添加自己的一些配置,所以需要重寫一些啟動配置邏輯,大概分為以下3種:

  1、@EnableWebMvc + extends WebMvcConfigurationAdapter,在擴展的類中重寫父類的方法即可,這種方式會屏蔽SpringBoot的@EnableAutoConfiguration

  2、extends WebMvcConfigurationSupport,在擴展的類中重寫父類的方法即可,這種方式會屏蔽SpringBoot的@EnableAutoConfiguration

  3、extends WebMvcConfigurationAdapter,在擴展的類中重寫父類的方法即可,這種方式則不會屏蔽SpringBoot的@EnableAutoConfiguration

具體使用哪種還是根據項目需要來選擇。

就此,填坑結束!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM