我對臨時用戶的Oracle數據庫使用Spring身份驗證。這些用戶將被分配一個數字ID,用戶可以登錄到有限的網站。一切工作正常,但我只知道用戶將在某個時間輸入用戶名,而不是他們的數字ID(我在測試時自己做了!)。由於我認證的數據庫列是NUMBER,所以我得到一個醜陋的HTTP Status 401頁面,其中有一個SQLSyntaxErrorException,說他們輸入的是一個無效的數字(它是)。春季數據庫身份驗證異常處理?
有沒有辦法妥善處理這件事?例如,Spring有一個ExceptionMappingAuthenticationFailureHandler,允許您將各種類型的身份驗證異常映射到網頁,以便您可以將用戶重定向到一個有意義的錯誤頁面,並且我們目前正在使用BadCredentialsException之類的東西。看起來,你不能僅僅在這裏使用任何舊類型的excpetion,因爲我嘗試添加java.sql.SQLSyntaxErrorException並且它沒有改變任何東西。是否有類似的Spring類可以讓你捕捉其他類型的異常?或者我只是沒有配置正確的?這是我有什麼:
<bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler>
<property name="exceptionMappings">
<props>
<!-- The Spring exception types all work fine... -->
<prop key="org.springframework.security.authentication.BadCredentialsException">
/login/Bad Credentials
</prop>
<prop key="org.springframework.security.authentication.CredentialsExpiredException">
/login/Expired Credentials
</prop>
<prop key="org.springframework.security.authentication.LockedException">
/login/Account Locked
</prop>
<prop key="org.springframework.security.authentication.DisabledException">
/login/Account Disabled
</prop>
<!-- ...But this one doesn't do anything! -->
<prop key="java.sql.SQLSyntaxErrorException">
/login/Use Numeric ID
</prop>
</props>
</property>
<bean>
我真的想保持我的數據庫列定義爲一個數字。一個簡單的解決方案是將其設置爲VARCHAR,但只能將數字數據放入其中,但這有點難看。用統一的方式來處理所有的認證異常也是很好的,我們已經使用了Spring處理器。
在此先感謝!
非常好,謝謝!我想我可能會選擇#2,因爲現在你讓我想到了,無論如何我們還是需要更多的自定義內容。 –