[英]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.