Принципал не показывает полномочия после внедрения AuthoritiesExtractor - PullRequest
0 голосов
/ 11 января 2019

Я расширяю AuthoritiesExtractor. В моей реализации я добавляю новый авторитет под названием «MYROLE». Я создал компонент (@Bean), как показано ниже в SecurityConfig.java, чтобы инициализировать этот экстрактор, как показано ниже.

@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Bean
public AuthoritiesExtractor userAuthorityExtractor() {
return new UserAuthorityExtractor();
}  

Мой метод контроллера / me возвращает основной объект, показанный ниже.

@RestController
public class UserController {
@GetMapping("/me")
public Principal currentUser (Principal principal) {
return principal;
}

Возвращенный объект не отображает полномочия "MYROLE". Что мне не хватает?

1 Ответ

0 голосов
/ 11 января 2019

Перво-наперво, установите точку останова в вашем экстракторе. Ваш код вообще выполняется? Я бы установил точку останова здесь:

@Bean
public AuthoritiesExtractor userAuthorityExtractor() {
    return new UserAuthorityExtractor();
} 

Если это нет, тогда вам нужно выяснить, почему ваш боб не вызывается. Я бы удостоверился, что ваш SecurityConfig действительно обнаружен компонентным сканером .

Что касается вашего контроллера.

В Spring Security нет гарантии, что объект Principal также обладает правами доступа. Сам принципал очень простой интерфейс

/**
 * Returns the name of this principal.
 *
 * @return the name of this principal.
 */
public String getName();

Так что вы хотите, это Authentication объект, потому что этот интерфейс предоставляет getAuthorities

@RestController
public class UserController {

    @GetMapping("/me")
    public Principal currentUser (Authentication authentication) {
        //do what you need with authorities
        Collection<? extends GrantedAuthority> authorities = authentication.getAuthorities();
        return authentication.getPrincipal();
    }

Вы также можете просмотреть реализацию по умолчанию

public List<GrantedAuthority> extractAuthorities(Map<String, Object> map) {
    String authorities = "ROLE_USER";
    if (map.containsKey("authorities")) {
        authorities = this.asAuthorities(map.get("authorities"));
    }

    return AuthorityUtils.commaSeparatedStringToAuthorityList(authorities);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...