2016-01-12 4 views
1

Как только у меня есть главный вход в систему, как я могу получить все роли для пользователя?Получить все роли для текущего пользователя

Я создаю приложение Java EE 6, и я пишу службу JAX-RS, чтобы вернуть все роли для текущего пользователя, которые будут потребляться интерфейсом для правильного отображения экрана.

Я знаю, что существует несколько интерфейсов, которые могут возвращать, является ли пользователь членом определенной роли, но то, что я хочу, - это интерфейс, который позволит мне получить все роли для этого конкретного пользователя.

+0

В чем вопрос? Пожалуйста, аргументируйте это. –

+0

@satoshi, я думаю, я, возможно, сделал себя яснее сейчас. –

+0

Возможный дубликат: http://stackoverflow.com/questions/344117/how-to-get-user-roles-in-a-jsp-servlet Как определяются роли? Вы используете JAAS? Какой сервер приложений вы используете? –

ответ

1

Учитывая, что все имена ролей известны во время компиляции, вы можете сделать что-то вроде следующего:

public final class SecurityRoles { 

    static final String USER_ROLE = "user"; 
    static final String ADMIN_ROLE = "admin"; 
    static final String SUPPORT_ROLE = "support"; 

} 

и

@DeclareRoles({ 
     USER_ROLE, 
     ADMIN_ROLE, 
     SUPPORT_ROLE 
}) 
@Path("/rest") 
public class SomeRS { 

    @Resource 
    SecurityContext securityContext; 

    @GET 
    @PermitAll 
    @Produces(MediaType.APPLICATION_JSON) 
    public List<String> lookupUserRoles() { 
     return Arrays.stream(SomeRS.class.getAnnotation(DeclareRoles.class).value()) 
       .filter(roleName -> securityContext.isUserInRole(roleName)) 
       .collect(Collectors.toList()); 
    } 

} 

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

Обратите внимание, что если вы не используете @DeclareRoles, роли, используемые приложением, должны быть объявлены в файлах web.xml или application.xml (и вам нужно будет объявить имена в массиве String [] где-нибудь).

+0

... что означает, что нет API для проверки всех ролей напрямую, и единственный выход из него - проверить каждую роль отдельно, исправить? –

+1

Насколько я знаю, нет стандартного API для отображения всех ролей напрямую –