Java 使用自定义AuthenticationManager的快捷/旁路Spring Security 2.0身份验证

Java 使用自定义AuthenticationManager的快捷/旁路Spring Security 2.0身份验证,java,authentication,spring-security,Java,Authentication,Spring Security,对于现有的工作应用程序,我想提供一个辅助身份验证提供程序,可能是一个。假设它用于验证备份密码,或由于严格的密码策略而更改的先前密码,并且用户忘记了新密码- 对于概念验证,这个secondaryAuthenticationProvider的实现是什么样子的,它将始终对用户进行身份验证,而不管传入的凭据是什么?返回经过身份验证的对象的东西 在众多的子包类和方法中,我应该看哪一个 配置示例: <bean id="authenticationManager" class="org.springfr

对于现有的工作应用程序,我想提供一个辅助身份验证提供程序,可能是一个。假设它用于验证备份密码,或由于严格的密码策略而更改的先前密码,并且用户忘记了新密码-

对于概念验证,这个secondaryAuthenticationProvider的实现是什么样子的,它将始终对用户进行身份验证,而不管传入的凭据是什么?返回经过身份验证的对象的东西

在众多的子包类和方法中,我应该看哪一个

配置示例:

<bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
  <property name="providers">
    <list>
      <ref local="daoAuthenticationProvider"/>
      <ref local="secondaryAuthenticationProvider"/> <!-- new AuthProv -->
      <ref local="rememberMeAuthenticationProvider"/>
    </list>
  </property>
</bean>

如果只有一个备用密码,则可以声明第二个由特殊UserDetails服务支持的DaoAuthenticationProvider,该服务将使用该备用密码生成UserDetails

否则,您可以创建自定义AuthenticationProvider。DaoAuthenticationProvider中的凭据签入发生在附加AuthenticationChecks中,因此,如果要更改该逻辑,可以创建DaoAuthenticationProvider的子类,并用实现重写此方法


例如,如果要对用户进行身份验证,而不考虑其凭据,您可以用一个空的实现覆盖此方法。

听起来您应该创建自己的具有此行为的UserDetails服务-这是迄今为止最简单的方法。

我假设默认的AuthenticationProvider会将凭据与UserDetails进行比较,但听起来好像你在说身份验证是基于UserDetailService是否返回一些UserDetails。需要仔细阅读文档。。。