Spring security 登录时自动创建新用户帐户

Spring security 登录时自动创建新用户帐户,spring-security,ldap,Spring Security,Ldap,我设法使用spring security让我的应用程序与Active Directory(基本上是LDAP)一起工作,如下所示: <authentication-manager> <authentication-provider ref="ldapActiveDirectoryAuthProvider" /> </authentication-manager> <beans:bean id="grantedAuthoritiesMapper"

我设法使用spring security让我的应用程序与Active Directory(基本上是LDAP)一起工作,如下所示:

<authentication-manager>
    <authentication-provider ref="ldapActiveDirectoryAuthProvider" />
</authentication-manager>

<beans:bean id="grantedAuthoritiesMapper" class="mypackage.ActiveDirectoryGrantedAuthoritiesMapper"/>
    <beans:bean id="ldapActiveDirectoryAuthProvider" class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider">
    <beans:constructor-arg value="xxxx.xxx.xxxx" />
    <beans:constructor-arg value="ldap://xxx.xxx.xxx.xxx:389" /> 
    <beans:property name="authoritiesMapper" ref="grantedAuthoritiesMapper" />
    <beans:property name="useAuthenticationRequestCredentials" value="true" />
    <beans:property name="convertSubErrorCodesToExceptions" value="true" />
</beans:bean> 

但是,仅通过这样做,我需要在我的应用程序和Active Directory中注册用户。我希望能够在用户登录之前(但在Active Directory验证之后)查看他是否存在于我的数据库中,以及他是否没有在我的应用程序中创建新用户,然后继续正常操作

我相信我需要创建一个预验证提供者,但是我不知道在哪里可以插入我自己的类来编码用户的检查和注册

在创建用户之前,我还希望检查特定的权限


有人能帮我一下吗?

最后,我不得不在AuthenticationSuccess上更改身份验证处理程序。在spring中,在登录过程的生命周期中有身份验证和登录。在身份验证过程中,用户经过身份验证,但尚未登录到应用程序(即只有其凭据被视为有效,但应用程序的其余部分尚未意识到用户)

我将我的security.xml更改为:

<beans:bean id="authHandler" class="mypackage.activedirectory.ActiveDirectoryAuthenticationHandler" 

...

<form-login login-page="/login" authentication-failure-handler-ref="authHandler"
            authentication-success-handler-ref="authHandler" />

我还没有弄清楚如何处理特定于广告的错误(如用户被阻止或密码过期),现在它会显示我的应用程序默认登录错误消息。

Jeez,为什么要否决?你肯定是指后验证吗?@EJP我不知道,在对用户进行身份验证之前,我不需要在我的应用程序中创建用户吗?既然您已经提到了,那么在身份验证之后创建用户就更有意义了,因为在身份验证之前,我无法确定用户在Active Directory中是否真的有效。谢谢你的提示。
public class ActiveDirectoryAuthenticationHandler extends MyAuthenticationHandler {

@Autowired
private UserService userService;

@Override
public void onAuthenticationSuccess(HttpServletRequest req, HttpServletResponse resp, Authentication auth)
        throws IOException, ServletException {
    String username= auth.getName();
    User user= userService.findByUsername(username);
    if (user == null) {
        user= new User();
                    //set user properties
    }

    try {
        userService.save(user);
    } catch (EntityException e) {
        System.out.println(e.getMessage());
    }

    super.onAuthenticationSuccess(req, resp, auth);
}
}