如何从@WebFilter访问@SessionScoped bean

时间:2016-02-29 20:37:04

标签: cdi servlet-filters tomee tomee-7

我正在使用AuthenticationFilter在用户未登录时重定向。我使用的是TomEE 7.0.0-M2,因此支持Java-EE7。

AuthenticationFilter

@WebFilter(urlPatterns = "/*", dispatcherTypes = {DispatcherType.FORWARD, DispatcherType.REQUEST})
public class AuthenticationFilter implements Filter {

@Inject
private LoginBean loginBean;
...

LoginBean

import javax.enterprise.context.SessionScoped;
import javax.inject.Named;
import java.io.Serializable;

@Named
@SessionScoped
public class LoginBean implements Serializable {

问题是注入的LoginBean不是login.xhtml中的实例。所以我无法验证用户是否已成功登录。

LoginBean不在会话属性中,但我找到了正确的loginBean here,但我不知道如何访问它。但看起来这个bean在CDI中,但我如何从WebFilter访问它?

1 个答案:

答案 0 :(得分:0)

我仍然没有答案,但BalusC提到的另一个解决方案here

当用户成功登录时,我只需手动将loginBean添加到sessionMap

FacesContext.getCurrentInstance().getExternalContext().getSessionMap().put("loginBean", this);

在WebFilter中,我使用

访问loginBean
session.getAttribute("loginBean")

这是一个很好的解决方案吗?我的意思是......听起来像是一种解决方法。