SecurityContext не работает с @RolesAllowed
В настоящее время я создаю внутренний сервер, используя Jersey 2.5.1 в Tomcat 7. Для безопасности я использую@RolesAllowed
, @PermitAll
и т.д. аннотации, и я создал свой заказContainerRequestFilter
а такжеSecurityContext
.
Моя проблема в том, что когда мой@RolesAllowed
запрашивается аннотированный ресурс, он всегда отказывает в разрешении, даже если я принудительноisUserInRole(role)
способ вернутьtrue
, Тем не менее, мойfilter
метод вызывается. У Вас есть какие-то предложения? Я вставлю соответствующий код ниже.
мойContainerRequestFilter
реализация:
public class AuthorizationFilter implements ContainerRequestFilter
{
@Override
public void filter(ContainerRequestContext request) throws IOException
{
request.setSecurityContext(new Authorizer());
}
}
мойSecurityContext
реализация:
public class Authorizer implements SecurityContext
{
@Override
public String getAuthenticationScheme() {
return null;
}
@Override
public Principal getUserPrincipal() {
return null;
}
@Override
public boolean isSecure() {
return false;
}
@Override
public boolean isUserInRole(String role) {
return true;
}
}
Мой ресурс:
@Path("/secure")
public class TestSecureResource {
@GET
@PermitAll
@Path("/nonsec_test/{text}")
public Response nonSecureTest(
@PathParam("text") String text){
return Response.status(200).entity(text).build();
}
@GET
@RolesAllowed("admin")
@Path("/sec_test/{text}")
public Response secureTest(
@PathParam("text") String text){
return Response.status(200).entity(text).build();
}
}
мойResourceConfig
:
@ApplicationPath("/")
public class MyApplication extends ResourceConfig {
public MyApplication() {
super(TestSecureResource.class);
register(RolesAllowedDynamicFeature.class);
register(AuthorizationFilter.class);
}
}
Соответствующие части моегоweb.xml
:
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>pkg.backend</param-value>
</init-param>
<init-param>
<param-name>javax.ws.rs.Application</param-name>
<param-value>pkg.backend.MyApplication</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
В этом конкретном случае мой доступ кsecureTest
всегда отрицается Уточнить вещи; Я получаю код состояния HTTP 403 - Запрещено.
Заранее спасибо