2012-01-31 108 views
0

通常认证提供商认证经理标签与指向的bean创建一个用户服务裁判属性相关联的实现UserDetailsS​​ervice,但在我的应用程序中,它的ref属性已被用来指向实现AuthenticationProvider的bean。该bean编码用户提供的密码,并将其与数据库中的编码密码进行比较。 我有弹簧security.xml文件以下配置现在Spring3安全 - SwitchUserFilter - 可我们的UserDetailsS​​ervice的实现提供加密的密码

<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要求我提供一个密码,它可以匹配用户提供的密码,但我没有将原始密码存储在数据库中。没有选项可以提供一个实现接口的bean(比如我在上面提到的认证提供者属性中)或者一个选项,告诉spring需要对提供的密码进行编码,然后再将它与I进行比较从数据库提供。有什么建议么 ?

回答

3

SwitchUserFilter实际上没有做任何密码检查。如果确实如此,那意味着管理员用户必须知道他们正在切换到的帐户的密码,而这通常不是这种情况。最好的比喻是在unix上使用su

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

相关问题