spring security异常 - AichaelLee/Summary GitHub Wiki
对于spring security的登陆,当你设置了
<property name="authenticationFailureUrl" value="/portal/signin.html?error=true">
</property> 那么登陆信息有误便会跑到此link上了,但是此link无法具体返回具体的错误信息,例如到底是用户名不存在还是帐户被锁还是密码过期还是密码错误?这些信息就可以通过从session里通过取SPRING_SECURITY_LAST_EXCEPTION为key的值知道,详情可参见:org.springframework.security.ui.AbstractProcessingFilter. 验证机构会将登陆有误的最后一个exception set进去.常见excption如下: 用户名不存在:UsernameNotFoundException; 密码错误:BadCredentialException; 帐户被锁:LockedException; 帐户未启动:DisabledException; 密码过期:CredentialExpiredException;等等。
link 它这里有个hideUserNotFoundExceptions属性,默认是true。这样的话即便我们抛出了UsernameNotFoundException它也会转为BadCredentialsException,所以我们需要将hideUserNotFoundExceptions属性的值设为false,而在上一章中的那种配置方法是没有办法为其属性赋值的所以我们要手动注入.authentication-provider,所以配置就变成了下面的内容
<bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="hideUserNotFoundExceptions" value="false" />
<property name="userDetailsService" ref="userDetailService" />
<property name="userCache" ref="userCache" />
<property name="messageSource" ref="messageSource" />
<property name="passwordEncoder" ref="passwordEncode" />
<property name="saltSource" ref="saltSource" />
</bean>