【问题标题】:Spring3 Security - SwitchUserFilter - Can we supply encrypted passwords in the implementation of UserDetailsServiceSpring3 Security - SwitchUserFilter - 我们可以在 UserDetailsS​​ervice 的实现中提供加密密码吗
【发布时间】:2012-02-23 09:15:19
【问题描述】:

通常 authentication-manager 标签的 authentication-provider 与指向 bean 的 user-service-ref 属性相关联实现了 UserDetailsS​​ervice,但在我的应用程序中,它的 ref 属性已用于指向实现 AuthenticationProvider 的 bean。此 bean 对用户提供的密码进行编码,并将其与数据库中的编码密码进行比较。 我在 spring-security.xml 中有以下配置

<beans:bean id="myAuthenticationProvider" class="com.mysecurity.server.security.MyAuthenticationProvider" />

<authentication-manager alias="authenticationManager">
    <authentication-provider ref="eeAuthenticationProvider" />
</authentication-manager>

现在,如果我使用 SwitchUserFilter,它需要对实现 UserDetailsS​​ervice 的类的引用,如下所示:

<beans:bean id="switchUserProcessingFilter" class="org.springframework.security.web.authentication.switchuser.SwitchUserFilter">
    <beans:property name="userDetailsService" ref="userServices" />
    <beans:property name="switchUserUrl" value="/admin/switchUser" />
    <beans:property name="exitUserUrl" value="/exitUser" />
    <beans:property name="targetUrl" value="/" />
</beans:bean>

问题是 UserDetailsS​​ervice 要求我提供一个与用户提供的密码匹配的密码,但我没有将原始密码存储在数据库中。没有提供实现 AuthenticationProvider 接口的 bean 的选项(就像我上面提到的 authentication-provider 属性)或告诉 spring 它需要编码的选项在将其与我从数据库提供的密码进行比较之前提供的密码。有什么建议吗?

【问题讨论】:

    标签: authentication spring-security


    【解决方案1】:

    SwitchUserFilter 实际上并没有进行任何密码检查。如果是这样,则意味着管理员用户必须知道他们要切换到的帐户的密码,而通常情况并非如此。最好的类比是在 unix 上使用su

    因此,您为密码提供什么值并不重要。我将为您现有的代码创建一个适配器,它实现UserDetailsService 并为UserDetails 对象中的密码返回一个随机生成的值。唯一真正需要的信息是用户名和权限(以及您想要使用的任何其他自定义数据)。

    【讨论】:

      猜你喜欢
      • 2011-07-26
      • 1970-01-01
      • 2016-12-19
      • 2017-10-27
      • 2013-05-12
      • 2013-02-03
      • 2018-10-25
      • 2016-12-29
      • 2014-09-29
      相关资源
      最近更新 更多