在这种情况下应该定制哪个身份验证层?

时间:2014-01-06 23:36:24

标签: java spring java-ee authentication spring-security

当前的Spring应用程序需要非常具体的用户身份验证方式:

用户通过带有用户名(输入字段)和身份验证方法(下拉框)的表单进入应用程序,如果需要,可以使用密码(输入字段),然后用户应该能够通过提供的方式登录应用程序身份验证方法和凭据(如果使用LDAP等,可能不需要用户名和密码)

所以在这种情况下,我想

<AuthenticationManager>
    <BASICAuthenticationProvider/>
    <DAOAuthenticationProvider/>
    <LDAPAuthenticationProvider/>
    ......
</AuthenticationManager>

不适用于此方案。我是Spring Security的新手,经过一些研究,我发现有几个地方可能需要针对这种情况进行自定义:AuthenticationManagerAuthenticationProviderPreAuthenticationFilter等,但不知道从哪里开始。 然后应该覆盖哪些类? AuthenticationProvider的?或预认证?甚至是AuthenticationManager? Spring安全似乎有很多,但我不确定领先优势在哪里。我检查官方文档,但找不到类似于这种情况的解决方案。

提前致谢。

1 个答案:

答案 0 :(得分:1)

你需要从这样的事情开始

<authentication-manager>
    <authentication-provider user-service-ref="authenticationService">
    </authentication-provider>
</authentication-manager>

AuthenticationService需要实现UserDetailsS​​ervice(这是加载用户特定数据的核心接口)。在这里,您可以覆盖loadUserByUsername方法并提供一个可以从db获取用户详细信息的Dao。