我正在尝试学习LDAP + Spring安全。我已经用Apache DS设置了一个本地Dev。
我已经到了这样的地步,它将编译和运行没有错误,但当我试图登录它不做任何事情,我没有任何错误消息去。我甚至不能告诉如果DS是得到的请求。
如果有人对调试此问题有建议或能看到问题,那就太好了。
JSP:
<form action="/j_spring_security_check.action" method="POST">
<span><label for="username">User Name:</label>
<input id="username" name="j_username" type="text"/></span>
<span><label for="password">Password:</label>
<input id="password" name="j_password" type="password"/></span>
<span><input type="submit" value="Log In"/></span>
</form>
应用程序上下文:
<bean id="contextSource"
class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<constructor-arg value="ldap://localhost:389/dc=example,dc=com"/>
<property name="userDn" value="cn=system,dc=example,dc=com"/>
<property name="password" value="password"/>
</bean>
<bean id="ldapAuthProvider"
class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<constructor-arg>
<bean class="org.springframework.security.ldap.authentication.BindAuthenticator">
<constructor-arg ref="contextSource"/>
<property name="userDnPatterns"><list><value>uid={0},ou=system</value></list></property>
</bean>
</constructor-arg>
<constructor-arg>
<bean class="org.springframework.security.ldap.userdetails.DefaultLdapAuthoritiesPopulator">
<constructor-arg ref="contextSource"/>
<constructor-arg value="ou=system"/>
<property name="groupRoleAttribute" value="ou"/>
<property name="defaultRole" value="ROLE_ADMIN"/>
</bean>
</constructor-arg>
</bean>
spring security :
<http auto-config="true" use-expressions="true">
<intercept-url pattern="/noSecurityJSP/**" access="permitAll()"/>
<intercept-url pattern="/login*" access="permitAll()"/>
<intercept-url pattern="/resources/**" access="permitAll()"/>
<intercept-url pattern="/**" access="isAuthenticated()"/>
<form-login
login-page="/login.htm"
login-processing-url="/j_spring_security_check.action"
authentication-failure-url="/splash_page.htm?error=true"
default-target-url="/welcomePage.htm"
always-use-default-target="true"/>
</http>
<authentication-manager>
<authentication-provider ref='ldapAuthProvider'/>
</authentication-manager>
Spring Maven依赖项:
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-web</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-ldap</artifactId>
<version>3.0.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.ldap</groupId>
<artifactId>spring-ldap-core</artifactId>
<version>1.3.2.RELEASE</version>
LDAP
的图片
1条答案
按热度按时间sczxawaw1#
您的问题似乎是“我如何调试这个”,理想情况下,您应该提供更多关于“它什么都不做”的信息,但是对于调试,SpringSecurity的标准调试输出应该告诉您发生了什么,和ApacheDS还应该指示它是否接收到请求。(如果需要,您可以将其更改为DEBUG级别)。事实上,修改该示例以与您的目录结构一起工作可能是一个好主意,首先确保您可以按原样运行它。
我总是建议在尝试部署应用程序之前为类似的内容编写一个测试类-请参见常见问题解答中的示例-您可以在IDE中调试它。
如果你真的想知道发送到目录的是什么,你可以直接使用
tcpdump
这样的实用程序来监控网络流量。会将到端口389的TCP通信记录到控制台。
您的构建配置有一个问题,那就是
spring-security-ldap
依赖项的版本与其他spring安全jar不同。它们应该都是相同的。使用maven属性来防止类似的错误,并检查您的类路径(lib目录)以确保您没有任何重复的jar或不一致的版本。