Разрешены ли несколько ролей в аннотации @Secured с помощью Spring Security

Я хотел бы разрешить доступ к определенному методу более чем одной группе пользователей. Возможно ли в Spring Security 3.x сделать это с помощью аннотации @Secured? Рассмотрим две группы (роли) ОПЕРАТОР и ПОЛЬЗОВАТЕЛЬ, будет ли этот код действительным:

    @Secured("ROLE_OPERATOR", "ROLE_USER")
    public void doWork() {
        // do useful processing
    }


person Paul Gregoire    schedule 27.10.2011    source источник


Ответы (2)


Ты почти там. Синтаксически вам нужно написать это так:

@Secured({"ROLE_OPERATOR", "ROLE_USER"})
public void doWork() { ... }

Это связано с тем, что вы предоставляете несколько значений одному атрибуту массива аннотации. (Java в синтаксических особых случаях передает одно значение, но теперь вам нужно сделать это «правильно».)

person Donal Fellows    schedule 27.10.2011
comment
... и, если быть точным, это (включительно) OR, верно? Вы будете авторизованы, если вы являетесь ROLE_OPERATOR, или ROLE_USER, или обоими. Это не AND. - person SusanW; 11.04.2017

Ответ @Donal Fellows верен для приложений Spring. Однако, если вы работаете в Grails, вам нужно использовать синтаксис Groovy для списков, чтобы код выглядел так:

@Secured(["ROLE_OPERATOR", "ROLE_USER"])
public void doWork() { ... }
person 10GritSandpaper    schedule 25.07.2013
comment
Люди потрясающие - person AVI; 05.02.2021