Spring SpelExpression, кажется, не читает мой компонент при использовании @PreAuthorize

Я пытаюсь использовать @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 ответ


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

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

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


Есть идеи?

10000