3

Я использую Spring Security для аутентификации с Active Directory с использованием протокола LDAP. После кода хорошо работает при аутентификации и настройке шаблонов LDAP тоже (springSecurity.xml):LDAP - AD Имя пользователя Конфигурация пароля для контекстного источника

<?xml version="1.0" encoding="UTF-8"?> 
<beans:beans xmlns="http://www.springframework.org/schema/security" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xmlns:context="http://www.springframework.org/schema/context" 
      xmlns:beans="http://www.springframework.org/schema/beans" 
      xmlns:ldap="http://www.springframework.org/schema/ldap" 
      xsi:schemaLocation=" 
      http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.1.xsd 
      http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context.xsd 
      http://www.springframework.org/schema/ldap 
      http://www.springframework.org/schema/ldap/spring-ldap.xsd"> 

    <http use-expressions="true"> 

     <intercept-url pattern="/login" access="permitAll" /> 
     <intercept-url pattern="/authenticated" access="isAuthenticated()" /> 

     <form-login login-page="/login" default-target-url="/authenticated" 
      authentication-failure-url="/login?error=true" /> 
     <logout /> 


    </http> 

    <beans:bean 
     class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
     <beans:property name="location"> 
      <beans:value>classpath:/ldap.properties</beans:value> 
     </beans:property> 
     <beans:property name="SystemPropertiesMode"> 
      <beans:value>2</beans:value> <!-- OVERRIDE is 2 --> 
     </beans:property> 
    </beans:bean> 

    <beans:bean id="adAuthenticationProvider" 
     class="org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider"> 
     <beans:constructor-arg value="${sample.ldap.domain}" /> 
     <beans:constructor-arg value="${sample.ldap.url}" /> 
     <beans:property name="useAuthenticationRequestCredentials" 
      value="true" /> 
     <beans:property name="convertSubErrorCodesToExceptions" 
      value="true" /> 
    </beans:bean> 


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

<!-- Ldap after authentication --> 

    <context:property-placeholder location="classpath:/ldap.properties" 
     system-properties-mode="OVERRIDE" /> 
    <context:annotation-config /> 

    <ldap:context-source id="contextSource" 
         password="${sample.ldap.password}" 
         url="${sample.ldap.url}" 
         username="${sample.ldap.userDn}" 
         base="${sample.ldap.base}" 
         referral="follow" /> 

    <ldap:ldap-template id="ldapTemplate" 
     context-source-ref="contextSource" /> 

    <ldap:repositories base-package="com.domain" /> 

    <beans:bean class="com.service.UserService"> 
     <beans:property name="directoryType" value="${sample.ldap.directory.type}" /> 
    </beans:bean> 

    <!-- Required to make sure BaseLdapName is populated in UserService --> 
    <beans:bean 
     class="org.springframework.ldap.core.support.BaseLdapPathBeanPostProcessor" /> 

</beans:beans> 

Authentication отлично работает при выборке j_username и j_password от login.jsp. Чтобы настроить шаблон ldap, я использую атрибут имени пользователя и пароля, определенный в файле свойств, но я хочу использовать те же имя пользователя и пароль из весенней безопасности. Пожалуйста, объясните мне, как связать свойства атрибута Username и Password в . Ldap: context-source id = "contextSource", чтобы получить веские учетные данные безопасности.

Код немного грязный, любой вход для улучшения приветствуется.

ответ

3

Как указано в Configuration chapter справочной документации, вы можете использовать аутентификацию Spring Security для ContextSource, указав пользовательский номер authentication-source-ref в элементе конфигурации ContextSource. В вашем случае вы использовали бы SpringSecurityAuthenticationSource, поставляемый с Spring Security.

<ldap:context-source id="contextSource" 
        url="${sample.ldap.url}" 
        base="${sample.ldap.base}" 
        referral="follow" 
        authentication-source-ref="authenticationSource"/> 

<bean id="authenticationSource" 
    class="org.springframework.security.ldap.authentication.SpringSecurityAuthenticationSource" /> 
+0

Благодарим за отзыв. Я попробовал это решение раньше, но использовал другой класс, чтобы получить аутентификацию весенней безопасности, теперь это работает нормально. :) – NewBee

 Смежные вопросы

  • Нет связанных вопросов^_^