Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring mvc 如何在LdapAuthenticationProvider Spring Security中设置UserDetails?_Spring Mvc_Spring Security - Fatal编程技术网

Spring mvc 如何在LdapAuthenticationProvider Spring Security中设置UserDetails?

Spring mvc 如何在LdapAuthenticationProvider Spring Security中设置UserDetails?,spring-mvc,spring-security,Spring Mvc,Spring Security,我有我的SpringMVC应用程序,其中我使用LDAP进行身份验证,使用MySQL数据库进行授权。下面是ldap-config.xml文件 <bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource"> <property name="url" value="ldap://myLdapServerIp" /> <property nam

我有我的SpringMVC应用程序,其中我使用LDAP进行身份验证,使用MySQL数据库进行授权。下面是ldap-config.xml文件

<bean id="contextSource" class="org.springframework.ldap.core.support.LdapContextSource">
    <property name="url" value="ldap://myLdapServerIp" />
    <property name="base" value="ou=people,dc=company,dc=int" />
</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}</value>
                </list>
            </property>
        </bean>
    </constructor-arg>
    <constructor-arg>
        <bean id="authorities" class="com.package.security.MyLDAPAuthorities">
        </bean>
    </constructor-arg>
</bean>

<bean id="authenticationManager"
    class="org.springframework.security.authentication.ProviderManager">
    <constructor-arg ref="ldapAuthProvider" />
</bean>

uid={0}

而类只是从数据库中获取角色

@Service
public class MyLDAPAuthorities implements LdapAuthoritiesPopulator {

@Autowired
UserDao userDao;

@Override
public Collection<? extends GrantedAuthority> getGrantedAuthorities(
        DirContextOperations userData, String username) {

    User user= userDao.findUserByName(username);
    Collection<Role> userPermission = user.getRoles();
    Collection<MyGrantedAuthority> authorities = new ArrayList<>();
    for(Role r : userPermission){
        authorities.add(new MyGrantedAuthority(r.getPk().getRole().toString()));
    }
    return authorities;
}
@服务
公共类MyDapAuthories实现LdapAuthoritiesPopulator{
@自动连线
UserDao UserDao;
@凌驾

公共收藏您的最佳选择可能是按照手册中的说明操作

因为您想在这里调用数据库,所以我将使用一个,只需在您的
UserDetailsContextMapper
中加载所有数据,包括用户角色。这样您就不必进行两次数据库调用