在Spring Security中,如果用户名/密码不正确,我们可能会收到错误的凭据异常。
来自DOC:Spring Framework Authentication
java.lang.Object
java.lang.Throwable
java.lang.Exception
java.lang.RuntimeException
org.springframework.security.core.AuthenticationException
org.springframework.security.authentication.BadCredentialsException
是否有任何异常类或方法来区分用户名无效或密码无效?
如下所示:
catch(BadCredentialsException e) {
if(usernameInvalid) {
// invalid username
} else {
// password invalid
}
}
更新
public class SampleDaoAuthenticationProvider extends DaoAuthenticationProvider {
@Override
protected void additionalAuthenticationChecks(UserDetails
userDetails, UsernamePasswordAuthenticationToken authentication)
throws AuthenticationException {
setHideUserNotFoundExceptions(false);
super.additionalAuthenticationChecks(userDetails, authentication);
}
}
答案 0 :(得分:1)
警告:这样做不是一个好的安全措施。
但是,如果您真的不想隐藏UsernameNotFoundException
,可以使用{{AuthenticationProvider
(如果它从AbstractUserDetailsAuthenticationProvider
延伸)将其抛出而不是BadCredentialException
1}}。
JavaDoc Extract:
默认情况下,如果找不到
setHideUserNotFoundExceptions
或AbstractUserDetailsAuthenticationProvider
不正确,则BadCredentialsException
会引发username
。将此属性设置为password
将导致false
被抛出而不是前者。请注意,这被认为不如为两个例外投掷UsernameNotFoundException
安全。
示例:
BadCredentialsException