使用自定义AuthenticationManager快捷方式/绕过Spring Security 2.0身份验证

时间:2010-02-25 07:20:06

标签: java authentication spring-security

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

为了概念验证,这个secondaryAuthenticationProvider的实现会是什么样的,无论传入的凭据如何,它都将始终对用户进行身份验证? (返回经过身份验证的Authentication对象的内容)

许多org.springframework.security.providers&我应该看看子包类和方法吗?

示例配置:

<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>

2 个答案:

答案 0 :(得分:0)

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

否则,您可以创建自定义AuthenticationProviderDaoAuthenticationProvider中的凭据检入发生在additionalAuthenticationChecks(),因此如果您想要更改该逻辑,可以创建DaoAuthenticationProvider的子类并使用您的实现覆盖此方法。

例如,如果要对用户进行身份验证而不管其凭据如何,则可以使用空实现覆盖此方法。

答案 1 :(得分:0)

听起来我应该创建一个具有此行为的 UserDetailsS​​ervice - 这是迄今为止最简单的方法。