authenticate方法应该返回null还是AuthentificationException?

时间:2016-03-22 13:43:58

标签: java spring authentication spring-security

我有自己的spring srcurity auth提供者:

public class MyLdapAuthProvider implements AuthenticationProvider

   @Override
   public Authentication authenticate(Authentication authentication) throws AuthenticationException {
          if(goodCredetials()){
             return authenticateUserPassword((UsernamePasswordAuthenticationToken) authentication);
           } else {
              throw new BadCredentialsException("bad credentials");
          }
    }

我不明白如果在方法中我知道凭证是坏的,我应该返回什么 1 - 抛出AuthenticationException
2 - 返回null

我测试了这个并且我没有看到差异

P.S。

春天securitu配置:

<security:authentication-manager>
    <security:authentication-provider ref="provider1"/>
    <security:authentication-provider user-service-ref="provider2"/>
</security:authentication-manager>

P.S。

DOC:

  

验证身份验证(身份验证身份验证)                                   抛出AuthenticationException       使用与AuthenticationManager.authenticate(身份验证)相同的协议执行身份验证。       参数:       authentication - 身份验证请求对象。       返回:       完全身份验证的对象,包括凭据。如果AuthenticationProvider无法支持身份验证,则可能返回null   传递的Authentication对象。在这种情况下,下一个   AuthenticationProvider,支持显示的身份验证   上课将被尝试。       抛出:       AuthenticationException - 如果身份验证失败。

1 个答案:

答案 0 :(得分:1)

阅读doc。如果你返回null,你告诉spring你不能支持这种身份验证方法,它应该尝试下一个提供者(如果有的话)。

我的猜测是,如果你扔了,你就打破了与不同提供者一起尝试的链条。只要你有一个authProvider而不是它们的集合,它就不应该有太大的区别。

此外,在失败的auth上,你应该抛出AuthenticationException,而不是BadCredentials?