2016-02-29 61 views
0

我正在使用AuthenticationFilter在用戶未登錄時重定向用戶。我使用的是TomEE 7.0.0-M2,因此支持Java-EE7。如何從@WebFilter訪問@SessionScoped

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,但我不知道如何訪問它。但它看起來像是在CDI中的bean,但我如何從WebFilter訪問它?

回答

0

我還沒有一個答案,但該BalusC提到here的另一種解決方案:

當用戶成功登錄我只是手動添加loginBean到sessionMap

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

在網頁過濾我訪問loginBean與

session.getAttribute("loginBean") 

這是一個很好的解決方案嗎?我的意思是..聽起來像一個解決方法。