Spring mvc 如何在LdapAuthenticationProvider Spring Security中设置UserDetails?
我有我的SpringMVC应用程序,其中我使用LDAP进行身份验证,使用MySQL数据库进行授权。下面是ldap-config.xml文件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
<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
中加载所有数据,包括用户角色。这样您就不必进行两次数据库调用