我知道這可能不是針對此類問題的最佳設計,但僅針對特定要求。將HttpServletResponse注入到服務層的最佳方法
當前應用程序需要ServletContext
,HttpServletRequest
,HttpServletResponse
進入服務層爲customized authentication provider
。
顯然沒有任何具體的配置或繼承下面的代碼:
@Component("myAuthenticaionProvider")
public class MyAuthenticaionProvider implements AuthenticationUserDetailsService {
@Autowired private ServletContext context;
@Autowired private HttpServletRequest request;
@Autowired private HttpServletResponse response;
.......
}
必須拋出異常:有
攔截
HttpServletRequest
:nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No matching bean of type [javax.servlet.http.HttpServletResponse] found for dependency:
可能的解決方案,我能想到的過濾器,但這需要一個URL模式,否則會攔截所有我認爲可能是性能問題的網址?
在spring-security.xml或application-context.xml中創建一個
request
scope bean,然後注入當前身份驗證提供程序類,以使其能夠獲取HttpServletRequest
。但我認爲這裏有什麼問題,因爲如何啓動請求範圍bean?
那麼最佳做法是什麼?
你究竟想要達到什麼目的? – dhamibirendra
這是個壞主意,但在適當的環境中它會起作用。 ((ServletWebRequest)RequestContextHolder.getRequestAttributes())。getResponse();'。通過_適當的environment_,我的意思是'getRequestAttributes()'返回的'RequestAttributes'是類型'ServletWebRequest'。 –
如果你描述了你想要達到的目標,獲得一個好的解決方案的機會會更高。對我來說,它看起來像你需要一個過濾器(特別是因爲響應對象),但你不希望這樣。所以我真的很想知道誰在調用這個服務,何時(以及爲什麼)。 – zeroflagL