Spring SpelExpression, кажется, не читает мой компонент при использовании @PreAuthorize - PullRequest
1 голос
/ 16 мая 2019

Я пытаюсь использовать @PreAuthorize, но мне нужно настроить его таким образом, чтобы разные среды имели разный доступ, но когда я пытаюсь использовать @PreAuthorize ("hasAuthority (#bean)"), в авторитет ничего не читается.

Я пытался использовать #bean и @bean, но ни одна из них не работала, но если у меня есть жестко закодированная строка, она работает нормально. При использовании #bean ничего не передается, а при использовании @bean я получаю No bean resolver registered in the context to resolve access to bean 'readRole'

    @Bean
    public String readRole() {
        return "Domain Users";
    }

    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @PreAuthorize("hasAuthority(@readRole)")
    public @interface UserCanSeeRestricted { }

Тогда в моем покое контроллер:

    @SecurityConfigExample.UserCanSeeRestricted
    @GetMapping("/all")
    public Collection<Office> getAllOffices()
    {
        return officeService.getAll();
    }

Я хочу иметь возможность использовать readRole, чтобы возвращать различные группы в зависимости от среды и читать их с помощью @ PreAuthorize

Что я пробовал:

public class SecurityConfig {
        public String readRole = "Domain Users";
    }
    @Bean
    public SecurityConfig readRole() {
        return new SecurityConfig();
    }

    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @PreAuthorize("hasAuthority(@readRole.readRole)")
    public @interface UserCanSeeRestricted { }

--- Обновлено 2 раз:

    public class SecurityConfig {
        public String readRole() {
            return "Domain Users";
        }
    }
    @Bean
    public SecurityConfig readRole() {
        return new SecurityConfig();
    }

    @Target({ ElementType.METHOD, ElementType.TYPE })
    @Retention(RetentionPolicy.RUNTIME)
    @PreAuthorize("hasAuthority(@readRole.readRole())")
    public @interface UserCanSeeRestricted { }

Я пытался заменить

    @SecurityConfigExample.UserCanSeeRestricted

с

@PreAuthorize("hasAuthority(@readRole.readRole())")

и это не сработало

1 Ответ

0 голосов
/ 17 мая 2019

Решение, которое я нашел, было:

@Target({ ElementType.METHOD, ElementType.TYPE })
@Retention(RetentionPolicy.RUNTIME)
@PreAuthorize("hasAnyAuthority(#root.getThis().getProps().getWriteRole())")
public @interface UserCanEditRestricted { }

У каждого из моих контроллеров должен был быть объект props, в котором хранились роли.Таким образом, роль настраивается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...