我是第一次实施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。
请指教。在此先感谢!!
答案 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
您使用的是旧版本的Spring。从Spring v3.2开始,有一个名为@ControllerAdvice
的东西,它简化了MVC中的异常处理。