Spring MVC+Spring security+ LDAP(xml config):凭证错误

问题描述

在我已经开发的项目中,该项目是在 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...