У меня есть существующий код в классе, который простирался от javax.ws.rs.core.Application
Jax RS Авторизация
...
Context childContext = component.getContext().createChildContext();
JaxRsApplication application = new JaxRsApplication(childContext);
application.add(this);
application.setStatusService(new ErrorStatusService());
childContext.getAttributes().put("My Server", this);
...
ChallengeAuthenticator challengeGuard = new ChallengeAuthenticator(null, ChallengeScheme.HTTP_BASIC, "REST API Realm");
//Create in-memory users with roles
MemoryRealm realm = new MemoryRealm();
User user = new User("user", "user");
realm.getUsers().add(user);
realm.map(user, Role.get(null, "user"));
User owner = new User("admin", "admin");
realm.getUsers().add(owner);
realm.map(owner, Role.get(null, "admin"));
//Attach verifier to check authentication and enroler to determine roles
challengeGuard.setVerifier(realm.getVerifier());
challengeGuard.setEnroler(realm.getEnroler());
challengeGuard.setNext(application);
// Attach the application with HTTP basic authentication security
component.getDefaultHost().attach(challengeGuard);
Я не имею web.xml в моем коде. Я хотел бы добавить авторизацию в свой код. Это: https://restlet.com/technical-resources/restlet-framework/guide/2.3/core/security/authorization не относится ко мне, так как у меня нет ресурсов перезагрузки.
Как я могу реализовать авторизацию jax rs в свой код?
EDIT 1: Существующий код использует Restlet расширение JAX-RS: https://restlet.com/technical-resources/restlet-framework/guide/2.2/extensions/jaxrs
Я попробовал, что у меня JAX-RS класса ресурса:
@GET
@Path("/")
public String getStatus() {
if (!securityContext.isUserInRole("admin")) {
throw new WebApplicationException(Response.Status.FORBIDDEN);
}
...
}
Однако, он выбрасывает 403 даже я войдите в систему с admin
.
EDIT 2:
Когда я проверяю здесь: https://restlet.com/technical-resources/restlet-framework/guide/2.2/extensions/jaxrs Существует кусок кода:
this.setRoleChecker(...); // if needed
Это может решить мою проблему, но я не знаю, как установить роль проверки ,
PS: Я использую джерси 1.9 и restlet 2.2.3.
Я отредактировал свой вопрос. Ответ может быть очень простым, но я не мог найти способ заставить его работать. Я определяю роли через restlet (он использует расширение jax-rs), однако кажется, что он не распознается контекстом безопасности jax-rs. – kamaci
Я сделал другое изменение, чтобы уточнить мой вопрос. – kamaci
, если он дает вам ошибку 403, значит, это означает, что аутентификация работает :-) Вам просто нужно добавить пользователя в нужную группу. Это делается в конфигурации безопасности сервера приложений. Вы установили точку останова в первой строке в getStatus(), чтобы узнать, действительно ли она туда попала? – Guenther