Я пытаюсь назначить роли пользователю, успешно зарегистрировавшемуся в веб-приложении Spring. Для этого я использую аутентификацию LDAP.Как назначить роли на основе имени группы при входе пользователя в систему безопасности Spring
Мой WebSecurityConfig.java
package com.logsniffer.web.util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.ldap.authentication.ad.ActiveDirectoryLdapAuthenticationProvider;
import org.springframework.context.annotation.Bean;
import org.apache.log4j.Logger;
import org.springframework.security.core.Authentication;
import org.springframework.core.env.Environment;
import org.springframework.security.ldap.DefaultSpringSecurityContextSource;
import org.springframework.security.core.context.SecurityContextHolder;
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
Environment env;
@Autowired
public void registerGlobalAuthentication(AuthenticationManagerBuilder auth)
throws Exception
{
if ("h2".equals(env.getProperty("spring.profiles.active")))
return;
DefaultSpringSecurityContextSource context = new DefaultSpringSecurityContextSource("ldap://10.100.7.99:389/dc=ldap,dc=com");
context.afterPropertiesSet();
auth.ldapAuthentication()
.contextSource(context)
.userSearchFilter("uid={0}")
.userSearchBase("ou=support")
// .groupSearchBase("ou=support")
// .groupSearchFilter(String groupSearchFilter)
.groupRoleAttribute("cn")
.rolePrefix("");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable()
.authorizeRequests()
// .antMatchers("/", "/home").permitAll()
.anyRequest()
.authenticated()
.and()
.formLogin()
.permitAll();
}
}
Может быть, я понять это неправильно. Я думал, используя
.groupRoleAttribute("cn")
устанавливает роль пользователя. Но когда я пытаюсь напечатать пользовательские полномочия, например:
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
String r= authentication.getAuthorities().toString();
log.info("$$$$$$$$$$ " + r);
Я получаю пустую строку. Мой LDAP дерево имеет следующую конфигурацию
+--> dc=ldap,dc=com (1+)
---> cn=admin
---> ou=hr
+--> ou=support (1+)
| +--> cn=admin (2)
| | ---> cn=kaushan deva
| | ---> cn=sameera ramasinghe
| | ---> Create new entry here
| +--> cn=regular (1)
| | ---> cn=chamitha abe
Я являюсь prettry уверен в registerGlobalAuthentication
методы, как я пытаюсь для проверки подлинности пользователей является неправильным. Вот почему я не могу установить атрибуты роли группы. Но я не могу найти ошибку, так как я очень новичок в этом.
Что я хочу сделать, так это установить роли пользователей для каждого пользователя, который входит в систему, исходя из своей группы (admin
или regular
).
Да, это ноль. Спасибо за ссылку. Я пройду через это. Между тем, если бы вы могли дать некоторое понимание этого вопроса, это было бы здорово – SameeraR