Я использую ReastEasy в среде JBoss-7 и в настоящее время реализую функции безопасности. Я использую HTTP Basic с SSL-соединением. Добавление и оценки параметров заголовка легко (благодаря Passing parameters in the message header with a REST API):REST Аутентификация: CDI безопасен? Какая область для CDI @Produces?
@Provider @ServerInterceptor
public class RestSecurityInterceptor implements PreProcessInterceptor
{
@EJB MyBean fUser;
private MyUser user;
@Override
public ServerResponse preProcess(HttpRequest request, ResourceMethod method)
throws UnauthorizedException
{
// do some some stuff. If the request is authenticated I get a MyUser
user = ...
}
@Named @Produces @SessionScoped
public MyUser getCurrentUser() {return user;}
}
Это прекрасно работает, также @Produces
и @Inject
в моей работе REST службы как шарм.
@Path("/rest")
public class MyService extends Application
{
@Inject private MyUser currentUser;
@GET @Path("/test")
public String test()
{
return "Hello "+currentUser.getName();
}
}
Теперь мой вопрос: Является ли это безопасно реализовать безопасность REST таким образом (я не хочу обсуждение HTTP Basic про/минусы, давайте сосредоточимся на CDI)? Особенно мне интересно, могу ли я использовать CDI, как описано, и если я выбрал правильный объем с @SessionScoped
?
В моем приложении я вставляю POJO 'A'' @ SessionScoped' в конечную точку REST, которая имеет область по умолчанию. После первого вызова этой конечной точки все последующие вызовы одного и того же клиента получают экземпляр 'A', привязанный к его сеансу. Моя интерпретация этой ситуации заключается в том, что область сеанса работает для JAX-RS и активна; или я что-то не понял? – kraftan
Интересно, что он не должен быть активным, потому что по умолчанию нет привязки запросов к определенному сеансу. В разделе 6.7.2 спецификации CDI не упоминается, что он активен для веб-служб. – LightGuard