2012-05-04 5 views
4

Я использую 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?

ответ

0

Сфера действия сеанса не будет работать. Уже задано несколько вопросов о REST и области сеанса. Область сеанса неактивна для вызовов JAX-RS и JAX-WS.

+0

В моем приложении я вставляю POJO 'A'' @ SessionScoped' в конечную точку REST, которая имеет область по умолчанию. После первого вызова этой конечной точки все последующие вызовы одного и того же клиента получают экземпляр 'A', привязанный к его сеансу. Моя интерпретация этой ситуации заключается в том, что область сеанса работает для JAX-RS и активна; или я что-то не понял? – kraftan

+0

Интересно, что он не должен быть активным, потому что по умолчанию нет привязки запросов к определенному сеансу. В разделе 6.7.2 спецификации CDI не упоминается, что он активен для веб-служб. – LightGuard

Смежные вопросы