2013-11-12 4 views
3

У меня есть простой джерси 2.4 ресурс:@RolesAllowed не работает с пользовательским SecurityContext в Джерси?

@RolesAllowed("admin") 
public List<Folder> list(){} 

У меня также есть ContainerRequestFilter, который устанавливает пользовательские SecurityContext:

public void filter(ContainerRequestContext requestContext) throws IOException { 
requestContext.setSecurityContext(new MySecurityContext(...)); 
} 

В списке() функция я получаю правильный SecurityContext: MySecurityContext. И работает вызов «securityContext.isUserInRole (« admin »)».

Но аннотация @RolesAllowed, похоже, ничего не делает, функция isUserInRole MySecurityContext никогда не называется.

Нужно ли мне что-то делать, чтобы заставить @RolesAllowed работать?

ответ

7

Найдено это :-)

@RolesAllowed ("администратора") не @RolesAllowed ("{} администратор")

и наиболее важным из них:

регистра (RolesAllowedDynamicFeature.class) ;

+3

Спасибо! Я пропустил добавление * RolesAllowedDynamicFeature * при переносе с Jersey 1.x на 2.x и много часов было потрачено на поиск именно этого. Для тех, кто задается вопросом, куда идет вызов 'register()', он находится в вашей реализации 'javax.ws.rs.Application', которая передается ServletContainer (например,' org.glassfish.jersey.servlet.ServletContainer') посредством использования '' внутри 'web.xml'. – joelpet

1

Вы можете использовать это ниже в вашем web.xml

<context-param> 
    <param-name>resteasy.role.based.security</param-name> 
    <param-value>true</param-value> 
</context-param> 
+0

Для тех, кто приезжает сюда из Google: это делает трюк в Websphere Liberty! – tobitobitobi

Смежные вопросы