Я думаю, что вы не в контексте аутентификации запроса, и вы должны ле выполните проверку службы аутентификации Google.
Вот реализация этого подхода (не тестировался), если вы хотите пользовательские Restlet Authenticator
реализацию:
public class GoogleAuthenticator extends Authenticator {
private UserService userService;
public GoogleAuthenticator(Context context) {
super(context);
this.userService = UserServiceFactory.getUserService();
}
protected User createUser(com.google.appengine.api.users.User googleUser,
Request request, Response response) {
return new User(googleUser.getUserId());
}
protected boolean authenticate(Request request, Response response) {
// Get current Google user
com.google.appengine.api.users.User googleUser = userService.getCurrentUser();
// Check if the user is authenticated
if (googleUser!=null) {
// Authenticated through Google authentication service
request.getClientInfo().setUser(
createUser(googleUser, request, response));
return true;
} else {
// Not authenticated. Redirect to the login URL
response.redirectSeeOther(userService.createLoginURL(
request.getRequestURI()));
return false;
}
}
}
Однако такая аутентификация существует в расширении org.restlet.ext.gae
на некоторое время. Он использует услугу UserService
GAE. Поэтому я думаю, что у вас это есть с версией Restlet, которую вы используете. Вот пример использования ниже:
public Restlet createInboundRoot() {
Router router = new Router(getContext());
(...)
GaeAuthenticator guard= new GaeAuthenticator(getContext());
guard.setNext(router);
return guard;
}
Отредактировано:
Вы можете заметить, что аутентификатор GAE может использовать enroler GAE для этой цели (то есть, если это админ один).
Для реализации этого вам просто нужно создать экземпляр такого enroler и установить его на идентифицирующей, как мы проделали ниже:
GaeEnroler enroler = new GaeEnroler();
GaeAuthenticator guard = new GaeAuthenticator(getContext());
guard.setEnroler(enroler)
guard.setNext(router);
В вашем ресурсе сервера, вы можете проверить свою роль, как описано ниже:
protected boolean hasAdminRole() {
ClientInfo clientInfo = getClientInfo();
List<Role> roles = clientInfo.getRoles();
boolean isAdmin = false;
for (Role role : roles) {
if (role.getName().equals("admin")) {
isAdmin = true;
break;
}
}
return isAdmin;
}
@Post
public XX handlePost(YY content) {
if (!hasAdminRole()) {
throw new ResourceException(Status.CLIENT_ERROR_FORBIDDEN);
}
(...)
}
Надеется, что это помогает вам, Тьерри
в контексте ГА E есть учетная запись Google, которая является администратором. Есть ли способ сообщить в этом коде, что администраторы являются единственными, кто может получить доступ к ресурсу? – xybrek
Я обновил свой комментарий, чтобы описать, как использовать регистратор gae для обработки учетной записи администратора. Надеюсь, это поможет вам. –