2014-09-03 3 views
0

У меня есть приложение, в котором мы имеем боб, какКДИ RequestScope давая множественный объект по запросу

@RequestScoped 
public class UserSession extends SessionMessage { 

} 

Тогда мы имеем WebFilter в которой выше фасоли в впрыскиваемого. Фильтр заполняет все свойства объекта userSession.

public class SessionFilter implements Filter { 
    @Inject 
    private UserSession userSession; 
    ..... 
    public void doFilter(....){ 
     ..... 
     someService.populateSession(userSession); 
     chain.doFilter(req, res) 
    } 

} 

, а затем на

@Path("/token") 
public class TokenService { 
    @Inject 
    private UserSession userSession; 
    ..... 
} 

Я ожидаю тот же самый объект, который вводится в SessionFilter впрыскивается в TokenService. Тем не менее, я получаю другой объект в TokenService, чем один, введенный в SessionFilter.

Я не могу понять, почему тот же объект не вводится, если я определил его как RequestScope. Есть что-то, чего я не хватает?

+0

Можете ли вы уточнить, что реализации вы используете? –

ответ

0

Что вы имеете в виду с тот же объект? Если вы вызываете геттер-методы, вещи, установленные в фильтре, все еще существуют в TokenService?

бобы инъецированные в SessionFilter и TokenService являются КДИ-прокси-объекты скрываются фактический экземпляр для каждого запроса. Для получения дополнительной информации см. this question

+0

Свойства, установленные в фильтре, недоступны в TokenService. Если я вхожу объект userSession в фильтр и маркер, я получаю следующее Sep 02, 2014 3:34:40 PM SessionFilter doFilter INFO: UserSession: UserSession @ 3fcfbc65 сен 02, 2014 3:34:40 PM TokenService createToken INFO: UserSession: UserSession @ 5f59ab9d Из этого я понял, что получаю отдельный объект, а не тот, который вводится в фильтр. –

+0

Это как я сказал: Введенные бобы - это прокси, скрывающие реальный экземпляр (за запрос). Используйте методы setter и getter для доступа к свойствам, и он должен работать, как ожидалось. – DaniEll

+0

Я понимаю, что это прокси-объекты. Я использую метод getter для получения свойств userSession. Однако при попытке доступа к нему в TokenService свойства не задаются. Я вижу свойства, заданные в Filter. –

0

У меня была такая же проблема. Я использую Java EE 7 с wildfly 8.1.

Мое текущее решение заключается в использовании

HttpServletRequest context = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); 

это может быть использовано внутри UserSession для заполнения сессии с помощью HTTP-заголовка

@RequestScoped 
public class UserSession extends SessionMessage { 

    public Session getSession() { 

     HttpServletRequest context = (HttpServletRequest) PolicyContext.getContext("javax.servlet.http.HttpServletRequest"); 
     Session session = someService.populateSession(context); 
     return session; 
    } 

}