我們需要更多的細節才能夠給出完整的答案。但總體思路如下:
- 首先,請記住
AuthenticationProvider
s(並且應該保留)不知道web上下文。它們旨在驗證Authentication
對象,並且它們可以(也應該)像在EE或桌面應用程序中一樣運行在Web應用程序中。
- 您應該創建自己的認證對象(在那種情況下
UsernamePasswordAuthenticationToken
一個子類),將舉行新/自定義屬性,讓我們把它CustomToken
有一個新的屬性customProp
(你真的應該選擇更有意義的名稱:))
- 您應該繼承
UsernamePasswordAuthenticationFilter
以便能夠訪問請求參數並將您需要的內容放入您的認證對象中:方法setDetails
的UsernamePasswordAuthenticationFilter
完全符合該需求,因此只需在您的子類中重寫該方法即可。不要忘記配置新的子類以用於彈簧安全配置而不是UsernamePasswordAuthenticationFilter
- 在您的CustomProvider中,您現在可以將身份驗證對象轉換爲
CustomToken
並從該身份驗證對象中檢索添加的屬性(customProp
)。
感謝哈姆迪的答覆 –
更多詳細信息: - 我們有兩個表,我們正在存儲用戶的細節,以檢查證件,我們有我們自己的CustomAuthenticationProvider延伸DaoAuthenticationProvider的時候。現在基於在認證過程中從前端提供的附加參數,我們需要決定表以獲取哈希密碼來檢查。 –
感謝您的詳細信息。我建議的解決方案完全適用。請告訴我,如果有什麼不清楚,或者接受其他答案。 –