当前位置: 首页 > 知识库问答 >
问题:

authenticate方法是否应返回null或AuthentificationException?

刘兴朝
2023-03-14
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");
          }
    }
<security:authentication-manager>
    <security:authentication-provider ref="provider1"/>
    <security:authentication-provider user-service-ref="provider2"/>
</security:authentication-manager>

文件:

Authentication authenticate(Authentication Authentication)抛出AuthenticationException使用与AuthenticationManager相同的约定执行身份验证。参数:authentication-身份验证请求对象。返回:包含凭据的经过完全身份验证的对象。如果AuthenticationProvider无法支持传递的身份验证对象的身份验证,则可能返回null。在这种情况下,将尝试支持呈现的身份验证类的下一个AuthenticationProvider。抛出:AuthenticationException-如果身份验证失败。

共有1个答案

罗宪
2023-03-14

看医生。如果您返回null,那么您就是在告诉spring您不能支持这种身份验证方法,它应该尝试排队的下一个提供程序(如果有的话)。

我的猜测是,如果你不这样做,你就打破了尝试不同提供者的链条。只要您只有一个authProvider而不是它们的集合,就不会有太大区别。

此外,对于失败的身份验证,您应该抛出AuthenticationException,而不是BadCredentials?

 类似资料:
  • 问题内容: 我有这样的代码来使用读取文本文件: 它可以正常工作,但是Findbugs报告警告: NP_DEREFERENCE_OF_READLINE_VALUE:取消引用调用readLine()的结果,而不检查结果是否为null。如果没有更多的文本行要读取,则readLine()将返回null,并取消引用将生成一个null指针异常。 当我更改为时,即 该方法返回而该方法始终返回-实际上这是一个无限

  • 我试图模拟一些方法调用,但不幸的是我一直返回null。你能帮我指出我可能出错的地方吗?我正在使用time(). thenBack(),我觉得我正确地模拟了返回变量。事先非常感谢。我是JUnit和Mockito的新手,所以如果我错过了任何明显的东西,我很抱歉。 ServiceTest.java Service.java

  • 问题内容: 显然,该方法的返回类型为void,因此,它不返回任何内容。从这个意义上讲,我使用“返回”一词来表示将响应发送回请求它的客户端。 我正在尝试实现一个长轮询的Servlet。最好在我有想要发回的东西之前不发送响应,这将是有益的。因此,在doGet方法中,将连接的用户的ID和AsyncContext添加到映射中: 然后,当我有东西要发回时,我可以检索适当的上下文并写入其响应输出流: 但是,客

  • 我正在尝试编写一个sokoban求解器,我的代码可以工作,但是计算解决方案需要很多时间。我想这是因为我使用ArrayList,我尝试使用Hashtable,但是方法get不起作用, 因此,当我填充哈希表,并使用键获取列表时,我得到空值。 然而,顶点存在于图形中。 如何解决此问题以提高Sokoban解算器的速度。

  • 问题内容: 这些天来我一直在学习Java,而我读到的才是真正有趣的。现在,我想知道C#中的Properties和Accessor方法是否相同?还是C#已经自动返回克隆的副本? 谢谢。 问题答案: 引用就是……对存储在内存中的某个对象的引用。除非您明确编写代码以创建克隆并返回对该对象 的引用 ,否则您将始终绕过对同一实例的引用。 它试图避免您遇到的情况是将对象引用移交给您所依赖的调用方。您无法控制谁