搭建spring security 的嵌入式LDAP報錯如下,提示缺少directoryserivce的類,但是我找了很久,試了pom.ml很多依賴還是沒能成功,我的框架是spring+springmvc+security+LDAPContext?initialization?failed?java.lang.NoClassDefFoundError:org/apache/directory/server/core/DirectoryServicepom.xml相關配置如下<dependency>
????????????<groupId>org.apache.geronimo.plugins</groupId>
????????????<artifactId>directory</artifactId>
????????????<version>1.0</version>
????????</dependency>
????????<dependency>
????????????<groupId>org.apache.directory.server</groupId>
????????????<artifactId>apacheds-service</artifactId>
????????????<version>2.0.0-M21</version>
????????</dependency>
????????<dependency>
????????????<groupId>org.apache.directory.server</groupId>
????????????<artifactId>apacheds-core</artifactId>
????????????<version>1.5.5</version>
????????</dependency>
????????<dependency>
????????????<groupId>org.apache.directory.server</groupId>
????????????<artifactId>apacheds-server-jndi</artifactId>
????????????<version>1.5.5</version>
????????</dependency>
????????<dependency>
????????????<groupId>org.apache.directory.server</groupId>
????????????<artifactId>apacheds-all</artifactId>
????????????<version>1.5.5</version>
????????</dependency>
????????<dependency>
????????????<!--?Required?by?ApacheDS,?but?not?listed?in?its?POM?-->
????????????<groupId>commons-collections</groupId>
????????????<artifactId>commons-collections</artifactId>
????????????<version>3.2.1</version>
????????</dependency>我的security.xml配置如下,因為是跟著書里的教程做的,里面還有一些其他的配置?xml?version="1.0"?encoding="UTF-8"?>
<beans?xmlns:security="http://www.springframework.org/schema/security"
???????xmlns:="http://www.springframework.org/schema/beans"
???????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
???????xmlns:util="http://www.springframework.org/schema/util"
???????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
????????http://www.springframework.org/schema/util?http://www.springframework.org/schema/util/spring-util.xsd"
????????>
????<security:debug?/>
????<!--對Controller方法攔截的Security框架的配置-->
????<security:global-method-security?jsr250-annotations="enabled"?secured-annotations="enabled"?pre-post-annotations="enabled"/>
????<security:http?pattern="/login"?security="none"?/>
????<security:http?pattern="/home"?security="none"/>
????<security:http?pattern="/"?security="none"?/>
????<!--<security:http?pattern="/login.do"?security="none"?/>-->
????<security:http?pattern="/static/css/favicon.ico"?security="none"/>
????<security:http?auto-config="true"?use-expressions="true"?>
????????<security:access-denied-handler?error-page="/accessDenied.do"/>
????????<security:session-management?session-fixation-protection="migrateSession">
????????????<security:concurrency-control?max-sessions="10"?expired-url=?"/login.do?error=expired"/>
????????</security:session-management>
????????<!--<security:intercept-url?pattern="/**"?access="hasRole('ROLE_ADMIN')"?/>-->
????????<security:intercept-url?pattern="/login.do"?access="permitAll"?requires-channel="https"?/>
????????<security:intercept-url?pattern="/**"?access="hasRole('ROLE_ADMIN')?or?hasRole('ROLE_USER')"?requires-channel="https"/>
????????<security:remember-me?key="jbcpPetStore"?services-ref="ipTokenBasedRememberMeServicesBean"/>
????????<security:form-login
????????????????login-page="/login.do"
????????????????username-parameter="username"
????????????????password-parameter="password"
????????????????default-target-url="/header"
????????????????/>
????????<security:custom-filter?ref="requestHeaderFilter"?before="FORM_LOGIN_FILTER"/>
????????<security:remember-me?key="jbcpPetStore"?token-validity-seconds="360"?user-service-ref="myUserDetailService"/>
????????<security:logout?invalidate-session="true"?logout-success-url="/"?logout-url="/logout"/>
????????<security:custom-filter?ref="ipFilter"?before="FILTER_SECURITY_INTERCEPTOR"/>
????</security:http>
????<security:authentication-manager?alias="authenticationManager">
????????<security:authentication-provider?ref="signedRequestAuthenticationProvider"/>
????????<security:authentication-provider?user-service-ref="myUserDetailService">
????????????<security:password-encoder?ref="BCryptEncoder"/>
????????</security:authentication-provider>
????????<security:ldap-authentication-provider?server-ref="ldapLocal"?user-search-filter="(uid={0})"?group-search-base="ou=Groups"/>
????</security:authentication-manager>
????<security:ldap-server?id="ldapLocal"?ldif="classpath:JBCPPets.ldif"??root="dc=jbcppets,dc=com"/>
????<bean?id="ipTokenBasedRememberMeServicesBean"?class="com.ssm.security.IPTokenBasedRememberMeServices"?>
????????<property?name="key"?value="jbcpPetStore"/>
????????<property?name="userDetailsService"?ref="myUserDetailService"/>
????????<!--?To?experiment?with?changing?the?checkbox?name?and?cookie?name?注意要與jsp頁面的名字匹配-->
<!--????????<property?name="parameter"><value>_remember_me</value></property>
????????<property?name="cookieName"><value>REMEMBER_ME</value></property>-->
????</bean>
????<bean?id="authenticationFilter"?class=?"org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
????????<property?name?="authenticationManager"?ref="authenticationManager"/>
????</bean>
????<bean?id="myUserDetailService"?class="com.ssm.security.MyUserDetailService"?>
????</bean>
????<bean?id="BCryptEncoder"?class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"?/>
????<bean?id="ipFilter"?class="com.ssm.security.IPRoleAuthenticationFilter">
????????<property?name="targetRole"?value="ROLE_ADMIN"/>
????????<property?name="allowedIPAddresses">
????????????<list>
????????????????<value>0:0:0:0:0:0:0:1</value>
????????????</list>
????????</property>
????</bean>
????<bean?id="signedRequestAuthenticationProvider"?class="com.ssm.security.SignedUsernamePasswordAuthenticationProvider">
????????<property?name="passwordEncoder"?ref="BCryptEncoder"/>
????????<property?name="userDetailsService"?ref="myUserDetailService"/>
????</bean>
????<bean?id="requestHeaderFilter"?class="com.ssm.security.RequestHeaderProcessingFilter">
????????<property?name="authenticationManager"?ref="authenticationManager"/>
????</bean>
</beans>以下是我照做的例子?配置?LDAP?服務器引用
第一步是在?dogstore-security.xml?中聲明嵌入式?LDAP?服務器的引用。LDAP?服務器的聲明在<http>元素之外,與<authentication-manager>相同的等級:
<ldap-server?ldif="classpath:JBCPPets.ldif"?id="ldapLocal"?
root="dc=jb?cppets,dc=com"/>
我們從?classpath?中加載?JBCPPets.ldif,并用其為?LDAP?服務器插入數據。這意味著(如
同嵌入式?HSQL?數據庫啟動那樣)我們應該在?WEB-INF/classes?放置?JBCPPets.ldif?文件。root屬性用特定的?DN?聲明了LDAP?目錄的根。這應該與我們使用的?LDIF?文件邏輯根?DN?相對應。
【注意,對于嵌入式的LDAP?服務器,root?是必須的,盡管?XML?模式并沒有這樣聲明。如果它沒有指明或指明錯誤,你會在?Apache?DS?server?啟動的時候看待幾個奇怪的錯誤?!?當我們在?Spring?Security?配置文件中聲明?LDAP?用戶服務和其它配置元素時,會重用這里定義的?bean?ID。對于嵌入式的?LDAP?模式來說,<ldap-server>聲明的其它屬性都是可選的。
啟用?LDAP?AuthenticationProvider
接下來,我們要配置另一個?AuthenticationProvider,它用?LDAP?來檢查用戶憑證。簡單得添加另一個?AuthenticationProvider?即可,如下:
<authentication-manager?alias="authenticationManager">
<!--?Other?authentication?providers?are?here?-->
<ldap-authentication-provider?server-ref="ldapLocal"?user-search-filter="(uid={0})"
group-search-base="ou=Groups"
/>
</authentication-manager>
我們稍后將會介紹這些屬性——現在,回到應用并運行,使用用戶名?ldapguest?和密碼
password?進行登錄。你應該能夠登錄進去了!
搭建security嵌入式LDAP報錯
慕粉2120347094
2017-07-08 08:37:49