Użyj hasła JAAS dla LDAP z zabezpieczeniami Spring

Mam aplikację internetową Java EE, która korzysta z uwierzytelniania LDAP. Używam Spring Security do łączenia się z moim LDAP za pomocą następującego kodu:

<bean id="ldapContextSource" class="com.myapp.security.authentication.MySecurityContextSource">
    <constructor-arg index="0" value="${ldap.url}" />
    <constructor-arg index="1" ref="userConnexion" />
</bean>

<security:authentication-manager alias="authenticationManager">
<security:authentication-provider ref="ldapAuthProvider" />
</security:authentication-manager>

<bean id="userConnexion" class="com.myapp.util.security.WebsphereCredentials">
    <constructor-arg value="${ldap.authJndiAlias}" />
</bean>

<bean id="ldapAuthProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
    <constructor-arg>
        <bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
            <constructor-arg ref="ldapContextSource" />
            <property name="userSearch" ref="userSearch" />
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean class="com.myapp.security.authentication.MyAuthoritiesPopulator" >
            <property name="userService" ref="userService" />
        </bean>
    </constructor-arg>
    <property name="userDetailsContextMapper" ref="myUserDetailsContextMapper"/>
    <property name="hideUserNotFoundExceptions" value="false" />
</bean>

Właściwie to moja fasolaWebsphereCredentials używa prywatnej klasy WebSphereWSMappingCallbackHandlerFactory jak w tej odpowiedzi:Jak uzyskać dostęp do aliasu uwierzytelniania z EJB wdrożonego do Websphere 6.1

Możemy to zobaczyć w oficjalnej dokumentacji websphere:http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.express.doc%2Finfo%2Fexp%2Fae%2Frsec_pluginj2c.html

Ale tego nie chcę, ponieważ:

Myślę, że moja aplikacja może uzyskać dostęp do wszystkich loginów JAAS w mojej instancji WebSphere (nie jestem pewien).Ta klasa jest zdefiniowana w bibliotece klienta OGROMNE IBM com.ibm.ws.admin.client-7.0.0.jar (42 Mo) => kompilacja wolniejsza, nieobecna w moim przedsiębiorstwieTo nie jest przenośne, nie standardowe

Aby uzyskać informacje, definiujęWebsphereCredentials konstruktor jak to:

Map<String, String> map = new HashMap<String, String>();

map.put(Constants.MAPPING_ALIAS, this.jndiAlias);
Subject subject;
try {
    CallbackHandler callbackHandler = WSMappingCallbackHandlerFactory.getInstance().getCallbackHandler(map, null);
    LoginContext lc = new LoginContext("DefaultPrincipalMapping", callbackHandler);
    lc.login();
    subject = lc.getSubject();
} catch (NotImplementedException e) {
    throw new EfritTechnicalException(EfritTechnicalExceptionEnum.LOGIN_CREDENTIAL_PROBLEM, e);
} catch (LoginException e) {
    throw new EfritTechnicalException(EfritTechnicalExceptionEnum.LOGIN_CREDENTIAL_PROBLEM, e);
}

PasswordCredential cred = (PasswordCredential) subject.getPrivateCredentials().toArray()[0];

this.user = cred.getUserName();
this.password = String.valueOf(cred.getPassword());

Czy istnieje sposób na użycie tylko zabezpieczeń Spring i usunięcie tej zależności?

Nie mam pojęcia jak się połączyćhttp://static.springsource.org/spring-security/site/docs/3.1.x/reference/jaas.html ihttp://static.springsource.org/spring-security/site/docs/3.1.x/reference/ldap.html.

Może muszę całkowicie zmienić moje podejście i wykorzystać inny sposób?

questionAnswers(1)

yourAnswerToTheQuestion