簡體   English   中英

JSF 1.2中的會話處理

[英]session handling in JSF 1.2

我們如何處理JSF 1.2中的會話變量(添加/獲取)?

場景:考慮用戶成功登錄的登錄屏幕,用戶模型存儲在會話中。 用戶模式包含用戶角色。 下次,對於每個用戶操作,檢查用戶模型中的用戶角色並相應地顯示表單。 在這種情況下,如何在會話中添加用戶odel以及如何在每次會話中執行它?

以前我在Struts 1.2中工作過,在execute方法中,我們有一個request e =,用於獲取會話並訪問會話變量。 但我不確定如何在JSF 1.2中實現相同的功能。

唯一可行的方法是在faces-config.xml文件中的會話范圍中添加托管bean嗎?

請幫我解決JSF 1.2中的會話處理概念。

會話范圍由ExternalContext#getSessionMap()以編程方式提供,它將ExternalContext#getSessionMap()委托給HttpSession#get/setAttribute()

Map<String, Object> sessionMap = FacesContext.getCurrentInstance().getExternalContext().getSessionMap();
// ...

您當然也可以將托管bean放在會話范圍內。 可以通過<managed-property>從其他托管bean訪問它(或者只使用托管bean名稱作為map鍵遍歷會話映射)。

我認為您可以使用Java EE過濾器來實現此機制。

過濾器由Servlet Container控制,並根據your web.xml順序首先在操作上運行。

將servlet過濾器添加到項目中。

public class YourFilter implements Filter {

public static final String USER = "USER_SESSION_KEY";

public void doFilter(ServletRequest req, ServletResponse response, FilterChain filterChain)
{

   HttpServletRequest request = (HttpServletRequest) req;
   HttpSession session = request.getSession(true);
       String servletpath = request.getServletPath();
if(!servletpath.contains("login.xhtml")) //exclude your login page and other pages required to pass this filter.
{
     if (session.getAttribute(USER) != null)
    {
    //Control your authentication and roles.
    }
    else
    {
    //There is no user in the session.
    }
}


    }
    filterChain.doFilter(request, response);
    }

將過濾器添加到web.xml

<filter>
    <filter-name>YourFilter</filter-name>
    <filter-class>Package.YourFilter</filter-class>
</filter>
  <filter-mapping>
    <filter-name>YourFilter</filter-name>
    <servlet-name>Faces Servlet</servlet-name>
  </filter-mapping>

其次,將您的User類放入JSF操作中的會話中。

public void userAction()
{


 User user = new User();
   //Build your User Class
  HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
    request.getSession(false).setAttribute("USER", user);

}

PS:用戶類是用戶定義的POJO類。 你應該根據你的需要實現它。

public class User
{
    private String username;
       //Other properties and getter setter methods required.

}

如果要在JSF上下文中實現此機制。 您可以通過實現JSF階段偵聽器來構建相同的邏輯。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM