在我的項目中,我使用Java,Spring安全性和SAML擴展。發生錯誤時,我需要將SAML令牌顯示到我的日誌中。我重寫了SimpleUrlAuthenticationFailureHandler並提供了自己的實現。我可以通過查看傳遞給Spring SAML身份驗證失敗處理程序和日誌記錄
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response, AuthenticationException exception)
我怎樣才能從onAuthenticationFailure方法的主體內檢索SAML令牌對象檢查異常的類型? onAuthenticationFailure方法是我處理錯誤的中心位置。我想在我的日誌中顯示SAML令牌。我曾嘗試靜態檢索認證對象:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
我希望從Authentication獲得SAMLCredential,但上面返回null Authentication對象。
我試過的另一件事是重寫AuthenticationException並添加一個自定義String屬性來包含令牌。 AuthenticationException意味着被覆蓋以提供這種定製。這只是部分工作。 「在Spring/SAML API在身份驗證期間調用loadUserBySAML(...)方法後,我可以拋出自定義異常。我將能夠將該令牌存儲在我的自定義異常中,並在稍後參考。這適用於某些類型的例外,如未找到用戶。但是,如果在調用loadUserBySAML(即錯誤的證書或摘要失敗)之前出現問題,我沒有機會拋出自己的自定義異常,除非我重寫更多的Spring/SAML內置類。我寧願不要重寫太多這些類,特別是僅用於日誌記錄。我正在尋找更簡單的東西。
是否有另一種技術我錯過了在onAuthenticationFailure方法的上下文中檢索SAML令牌?