如何在Spring Security中处理“无法获取JDBC连接异常”

时间:2014-12-08 16:20:01

标签: spring security jdbc

我是第一次实施Spring Security身份验证和授权。

当Spring Security通过执行以下查询对JDBC-USER-SERVICE进行身份验证时

select username, password, status as enabled from bbp_user where username=?

我收到以下例外

2014-12-08 21:23:23,852 [http-bio-8090-exec-4] DEBUG org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter  - 
Authentication request failed: 
org.springframework.security.authentication.AuthenticationServiceException: **Could not get JDBC 
Connection**; nested exception is org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create 
PoolableConnectionFactory (Io exception: **The Network Adapter could not establish the connection)

请找到安全XML的一部分

<form-login 
        login-page="/inventory/auth/login" 
        default-target-url="/inventory/landing/loadDashBoardPage"
        authentication-failure-url="/inventory/auth/login?error"
        username-parameter="username" 
        password-parameter="password" />

<authentication-manager>
    <authentication-provider>

        <jdbc-user-service data-source-ref="dataSource"
            users-by-username-query="select username, password, status as enabled from bbp_user where username=?"
            />
    </authentication-provider>
</authentication-manager>

使用用户名和密码验证失败后,我设计重新发布登录页面,并显示错误消息,例如“用户名或密码无效”。

但是,如何将JDBC类型的底层异常重定向到web.xml中提到的特定错误页面

<!-- Application Exceptions -->
<error-page>
    <!-- Route all exceptions to error page -->
    <exception-type>java.lang.Throwable</exception-type>
    <location>/Dashboard/jsp/error.jsp</location>
</error-page>

我正在使用Spring 3.0.5和Spring Security 3.1.0版,fyi。

请指教。在此先感谢!!

1 个答案:

答案 0 :(得分:0)

有很多方法可以做到这一点。这样做的传统方式是在web.xml中

<error-page>
    <error-code>500</error-code> <!-- All Internal Server Errors -->
    <location>/error.htm</location>
</error-page>

现在定义一个与@RequestMapping("/error")类似的控制器:

 @RequestMapping("/error")
    public String handle500()
    {
      return "internalServer";
    }

internalServer定义视图。

另一种方式是在Spring安全配置中执行此操作。 authentication-failure-url属性。这意味着登录过程中的任何异常都将带您在此属性中定义的URL。然后定义与authentication-failure-url

中指定的URL对应的视图

您使用的是旧版本的Spring。从Spring v3.2开始,有一个名为@ControllerAdvice的东西,它简化了MVC中的异常处理。