Я новичок здесь, хотя я уже нашел здесь много ответов на свои проблемы.
Теперь я ищу помощь в этом: у меня есть этот небольшой пример ресурса в моем маленьком REST API:
@Path("/greeting")
@PermitAll
public class HelloResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
@Path("all")
public String sayHelloToAll() {
return "Hello, everybody!";
}
@GET
@Produces(MediaType.TEXT_PLAIN)
@RolesAllowed("admin")
@Path("admin")
public String sayHelloToAdmin() {
return "Hello, admin!";
}
}
Для фильтрации ролей у меня есть реализация 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;
}
}
И эта реализация ContainerRequestFilter:
@Provider
@Priority(Priorities.AUTHENTICATION)
public class AuthorizationFilter implements ContainerRequestFilter {
@Override
public void filter(ContainerRequestContext requestContext) throws IOException {
requestContext.setSecurityContext(new Authorizer());
}
}
Это мой класс приложения:
@ApplicationPath("/")
public class Application extends ResourceConfig {
public Application() {
super(HelloResource.class);
register(AuthorizationFilter.class);
register(RolesAllowedDynamicFeature.class);
}
}
При этом, когда я запрашиваю URI приветствие/все, все ок, строка "Привет, всем!" Показано. Но когда я запрашиваю приветствие/администрирование URI, которое должно вызываться, когда его запрашивает пользователь в роли администратора, никогда не вызывается, даже если мой метод isUserInRole всегда возвращает true. На самом деле мой метод filter вызывается всегда, а мой метод isUserInRole никогда не вызывается.
Я следовал многим советам:
SecurityContext не работает с @RolesAllowed
Авторизация с помощью RolesAllowedDynamicFeature и Jersey
Как получить доступ к ресурсу Джерси, защищенному @RolesAllowed
Рекомендации по аутентификации на основе токенов REST с JAX-RS и Джерси
Но это, кажется, не работает ни с чем.
Кто-нибудь может мне помочь, пожалуйста! Я не знаю, есть ли что-то, чего мне не хватает
Спасибо всем заранее.
РЕДАКТИРОВАТЬ: Когда я запрашиваю приветствие URI/admin, я, кстати, получаю 403 Forbiden (забыл сказать это)