2015-08-18 6 views
1

Я работаю над веб-приложением Spring в нашей компании, которое проверяет подлинность пользователей из базы данных. Но мы хотим использовать активный сервер каталогов в нашей компании для этой цели вместо базы данных. к сожалению, у меня есть проблема с подключением к серверу. Вот моя весна-security.xmlКонфигурация Spring безопасности для аутентификации пользователя ldap

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


    <beans:bean id="successHandler" 
     class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
     <beans:property name="defaultTargetUrl" value="/App/Index" /> 
    </beans:bean> 

    <beans:bean id="failureHandler" 
     class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
     <beans:property name="defaultFailureUrl" value="/App/loginError" /> 
    </beans:bean> 

    <beans:bean id="loginUrlAuthenticationEntryPoint" 
     class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
     <beans:property name="loginFormUrl" value="/App/Login" /> 
    </beans:bean> 

    <beans:bean id="sessionRegistry" 
     class="org.springframework.security.core.session.SessionRegistryImpl"> 
    </beans:bean> 

    <beans:bean id="sas" 
     class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy"> 
     <beans:constructor-arg name="sessionRegistry" 
      ref="sessionRegistry" /> 
     <beans:property name="maximumSessions" value="1" /> 
    </beans:bean> 

    <http auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
     <intercept-url pattern="/Content/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/Desktop/New_Them/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/App/Index" access="ROLE_USER" /> 
     <intercept-url pattern="/App/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/rest/clc/ClcLogPhon/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
     <custom-filter ref="concurrencyFilter" position="CONCURRENT_SESSION_FILTER" /> 
     <logout logout-success-url="/App/Login" /> 
     <remember-me key="myAppKey" /> 
     <session-management 
      session-authentication-strategy-ref="sas"> 
     </session-management> 
     <csrf /> 
     <headers> 
      <xss-protection /> 
     </headers> 
    </http> 
    <global-method-security pre-post-annotations="enabled" 
     secured-annotations="enabled" proxy-target-class="true" /> 

    <beans:bean id="concurrencyFilter" 
     class="org.springframework.security.web.session.ConcurrentSessionFilter"> 
     <beans:property name="sessionRegistry" ref="sessionRegistry" /> 
     <beans:property name="expiredUrl" value="/App/Login" /> 
    </beans:bean> 

    <beans:bean id="passwordEncoder" 
     class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
     <beans:constructor-arg index="0" value="256" /> 
    </beans:bean> 

    <ldap-server id="ldapServer" 
     url="ldap://192.168.1.143/dc=springframework,dc=org" /> 

    <authentication-manager> 
     <ldap-authentication-provider server-ref="ldapServer" 
      user-dn-pattern="uid={0},ou=people" /> 
    </authentication-manager> 
</beans:beans> 

На самом деле я просто удалил бобы базы данных, связанных, а затем добавили Ldap-сервера и аутентификации-менеджер для того, чтобы сделать наше приложение, используя LDAP для аутентификации. Я использую Spring 4.0.1 и Spring security 3.2.1 вместе с java 1.7. Хотя веб-приложение запускается, любая информация, которую я ввел на странице входа, была отклонена, и я получил ошибку Access is denied в моей консоли в eclipse. Кроме того, я изменил URL-адрес Ldap на неправильный IP-адрес только для тестирования, если приложение завершилось с ошибкой. Но это совсем не изменилось. Поэтому я сомневаюсь, что он даже пытается подключиться к серверу.

ответ

1

Поскольку я не получил никаких ответов здесь, я ищу, чтобы решить свою проблему. Прежде всего, я должен установить URL-адрес так же, как и параметр Active Directory. Например, я полностью пренебрег адресом порта после IP-адреса, который по умолчанию равен 389. Более того, я изменил домен в конце URL-адреса на мой адрес активного адреса активного каталога. В конце мой URL-адрес изменен на

ldap://192.168.1.143:389/DC=myDomain,DC=org 

Во-вторых, я должен использовать пароль имя пользователя для подключения к LDAP. так что я изменить свою пружинный security.xml так же, как показано ниже:

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


    <beans:bean id="successHandler" 
     class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"> 
     <beans:property name="defaultTargetUrl" value="/App/Index" /> 
    </beans:bean> 

    <beans:bean id="failureHandler" 
     class="org.springframework.security.web.authentication.SimpleUrlAuthenticationFailureHandler"> 
     <beans:property name="defaultFailureUrl" value="/App/loginError" /> 
    </beans:bean> 

    <beans:bean id="loginUrlAuthenticationEntryPoint" 
     class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint"> 
     <beans:property name="loginFormUrl" value="/App/Login" /> 
    </beans:bean> 

    <beans:bean id="sessionRegistry" 
     class="org.springframework.security.core.session.SessionRegistryImpl"> 
    </beans:bean> 

    <beans:bean id="sas" 
     class="org.springframework.security.web.authentication.session.ConcurrentSessionControlStrategy"> 
     <beans:constructor-arg name="sessionRegistry" 
      ref="sessionRegistry" /> 
     <beans:property name="maximumSessions" value="1" /> 
    </beans:bean> 

    <http auto-config="true" entry-point-ref="loginUrlAuthenticationEntryPoint"> 
     <intercept-url pattern="/Content/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/Desktop/New_Them/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/App/Index" access="ROLE_USER" /> 
     <intercept-url pattern="/App/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/rest/clc/ClcLogPhon/**" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
     <intercept-url pattern="/**" access="ROLE_USER" /> 
     <custom-filter ref="concurrencyFilter" position="CONCURRENT_SESSION_FILTER" /> 
     <logout logout-success-url="/App/Login" /> 
     <remember-me key="myAppKey" /> 
     <session-management 
      session-authentication-strategy-ref="sas"> 
     </session-management> 
     <csrf /> 
     <headers> 
      <xss-protection /> 
     </headers> 
    </http> 
    <global-method-security pre-post-annotations="enabled" 
     secured-annotations="enabled" proxy-target-class="true" /> 

    <beans:bean id="concurrencyFilter" 
     class="org.springframework.security.web.session.ConcurrentSessionFilter"> 
     <beans:property name="sessionRegistry" ref="sessionRegistry" /> 
     <beans:property name="expiredUrl" value="/App/Login" /> 
    </beans:bean> 

    <beans:bean id="passwordEncoder" 
     class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"> 
     <beans:constructor-arg index="0" value="256" /> 
    </beans:bean> 

    <beans:bean id="contextSource" 
     class="org.springframework.security.ldap.DefaultSpringSecurityContextSource"> 
     <beans:constructor-arg 
      value="ldap://192.168.1.143:389/DC=myDomain,DC=org" /> 
     <beans:property name="userDn" 
      value="CN=username,CN=Users,DC=myDomain,DC=org" /> 
     <beans:property name="password" value="password" /> 
    </beans:bean> 

    <beans:bean id="ldapAuthProvider" 
     class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider"> 
     <beans:constructor-arg> 
      <beans:bean 
       class="org.springframework.security.ldap.authentication.BindAuthenticator"> 
       <beans:constructor-arg ref="contextSource" /> 
       <beans:property name="userDnPatterns"> 
        <beans:list> 
         <beans:value>uid={0},ou=users</beans:value> 
        </beans:list> 
       </beans:property> 
      </beans:bean> 
     </beans:constructor-arg> 
     <beans:constructor-arg> 
      <beans:bean 
       class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator"> 
       <beans:constructor-arg ref="contextSource" /> 
       <beans:constructor-arg value="ou=groups" /> 
       <beans:property name="groupRoleAttribute" value="ou" /> 
      </beans:bean> 
     </beans:constructor-arg> 
    </beans:bean> 

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

</beans:beans> 

В общем, я полностью рекомендую использовать JXplorer для подключения к Ldap сначала.