问题描述
在我已经开发的项目中,该项目是在 spring mvc 3.2.0 和 spring security 3.2.0 中开发的。不是 Maven 项目。现在出现了添加 LDAP 的新要求。我已经添加了所有配置。项目部署成功。但是在输入正确的登录凭据后,它给出了错误的凭据错误。 安全配置xml
<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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security.xsd">
<global-method-security secured-annotations="enabled" />
<http auto-config="true">
<form-login login-page="/login" default-target-url="/display"
authentication-failure-url="/Failed" />
<logout logout-success-url="/logout" />
</http>
<authentication-manager>
<authentication-provider ref="ldapProvider" />
</authentication-manager>
<beans:bean id="contextSource" class="org.springframework.security.ldap.DefaultSpringSecurityContextSource">
<beans:constructor-arg name="urls">
<beans:list>
<beans:value>ldap://mycompany.com:389</beans:value>
</beans:list>
</beans:constructor-arg>
<beans:constructor-arg name="basedn" value="ou=Users,dc=mycompany,dc=com"/>
</beans:bean>
<beans:bean id="ldapProvider" class="org.springframework.security.ldap.authentication.LdapAuthenticationProvider">
<beans:constructor-arg>
<beans:bean class="org.springframework.security.ldap.authentication.PasswordComparisonAuthenticator">
<beans:constructor-arg ref="contextSource" />
<beans:property name="passwordEncoder">
<beans:bean class="org.springframework.security.authentication.encoding.PlaintextPasswordEncoder"></beans:bean>
</beans:property>
<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 ref="populator">
</beans:constructor-arg>
</beans:bean>
<beans:bean id="populator" class="com.hcdc.coedp.safe.authentication.UserDetailsAuthoritiesPopulator">
<beans:constructor-arg ref="userDetailsService">
</beans:constructor-arg>
</beans:bean>
</beans:beans>
登录.jsp
<form:form id="logform" name="logform" action="${pageContext.request.contextpath}/j_spring_security_check" commandName="loginForm" modelattribute="loginForm" method="post" >
<label>username<em>*</em> </label>
<span>
<input type='text' name='j_username' value='' id="login_username"></span>
</p>
<p>
<label>password<em>*</em> </label>
<span>
<input type='password' name='j_password' id="login_password" >
</span>
</p>
<input type="submit" name="Submit" class="button black" value="submit"></form:form>
UserDetailsAuthoritiesPopulator.java
package com.spring.security;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ldap.core.DirContextOperations;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.security.ldap.userdetails.LdapAuthoritiesPopulator;
import java.util.Collection;
public class UserDetailsAuthoritiesPopulator implements LdapAuthoritiesPopulator {
private static Logger logger = LoggerFactory.getLogger(UserDetailsAuthoritiesPopulator.class);
private UserDetailsService userDetailsService;
public UserDetailsAuthoritiesPopulator(UserDetailsService userDetailsService) {
setUserDetailsService(userDetailsService);
}
public Collection<? extends GrantedAuthority> getGrantedAuthorities(DirContextOperations userData,String username) {
UserDetails ud = userDetailsService.loadUserByUsername(username);
Collection<? extends GrantedAuthority> res = ud.getAuthorities();
logger.debug("GrantedAuthorities for {}: {}",username,res);
return res;
}
public void setUserDetailsService(UserDetailsService userDetailsService) {
this.userDetailsService = userDetailsService;
}
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)