首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring数据库认证异常处理?

Spring数据库认证异常处理?
EN

Stack Overflow用户
提问于 2013-05-22 07:50:43
回答 1查看 818关注 0票数 0

对于临时用户,我对Oracle数据库使用Spring身份验证。这些用户将被分配一个数字ID,他们可以使用该ID登录有限的网站。一切都很正常,但我只知道用户在某些时候会输入用户名而不是他们的数字ID (我在测试时就自己做过了!)。因为我要验证的数据库列是一个数字,所以我得到了一个丑陋的HTTPstatus401页面,其中包含一个SQLSyntaxErrorException,说明他们输入的是一个无效的数字(事实确实如此)。

有没有办法优雅地处理这个问题?例如,Spring有一个ExceptionMappingAuthenticationFailureHandler,它允许您将各种类型的身份验证异常映射到web页面,以便您可以将用户重定向到有意义的错误页面,我们目前正在将其用于BadCredentialsException之类的东西。但是,您似乎不能在这里使用任何旧类型的excpetion,因为我尝试添加java.sql.SQLSyntaxErrorException,但它没有改变任何东西。有没有类似的Spring类可以让你捕捉其他类型的异常?或者我只是没有正确地配置?这就是我所拥有的:

代码语言:javascript
复制
<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处理程序了。

提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-22 08:04:07

而不是处理字符串与数字进行比较的异常,您应该在它得到验证之前处理这个问题。可能的选项包括:

  1. 修改登录控制器以拒绝使用非数字用户ids登录的尝试。如果您使用Spring Security中的内置控制器,这可能比选项#2更麻烦。
  2. 修改您的UserDetailsService以拒绝使用非数字用户名加载用户的尝试。如果用户名无效,让它抛出一个UsernameNotFoundException
  3. 拒绝纯粹在客户端的登录尝试-这通常是一个坏主意,因为这样的事情实际上应该发生在服务器端。我只是在不可能修改服务器端的情况下才建议这样做。仅供参考,这只是登录表单提交前的一些Javascript正则表达式验证。这在大多数情况下应该可以工作,但如果客户端禁用了Javascript,则不会工作。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16681345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档