使用:Mojarra 2.15,jsf 2.0,Jboss 7.1
嗨,我试图在doFilter方法会话中实现过期,但是:
问题是当用户输入用户名/密码和确认按钮时,我得到了会话过期页面,而不是转到右页。
if (httpServletRequest.getRequestedSessionId() != null && !httpServletRequest.isRequestedSessionIdValid()) {
session = httpServletRequest.getSession(true);
session.setAttribute("logedin", "0"); // public user
{
if(httpServletRequest.getRequestURL().toString().contains("index.xhtml"))
{
httpServletResponse.sendRedirect(loginPage);
}else
{
httpServletResponse.sendRedirect(timeoutPage);
}
} else {
request.setCharacterEncoding("UTF-8");
chain.doFilter(httpServletRequest, httpServletResponse);
}
答案 0 :(得分:1)
当您正在使用JSF时,我建议您使用过滤器: Servlet Filter not working
response.sendRedirect //包含相对路径
关于do过滤器:我假设你在登录方法中设置了USER对象属性
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
if (session == null || session.getAttribute("User") == null) {
response.sendRedirect(request.getContextPath() + "/index.xhtml"); // No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
Hibernate Authentification:我遇到了同样的问题,我通过检查会话是否仍然可用来修复它。然后当我想使用DB时,我只需要调用 getSessionFactory()。create 或 delete ....
protected Session getSessionFactory() { // Accessible que par les classes
// filles
session = HibernateUtil.getSessionFactory().getCurrentSession();
if(!session.getTransaction().isActive())
session.beginTransaction();
return session;
}
答案 1 :(得分:0)
当用户对index.html和session的请求过期时,您的过滤器会将其发送到登录表单。用户输入user / pass并单击登录按钮。新请求发送到服务器。 您的过滤器检查条件。会话过期过滤器一次又一次地将用户发送到登录表单 在过滤器中,您最多为条件添加条件。如果请求从index.html收到并且会话已过期且请求中没有设置任何用户/传递,或者用户/传递不正确则返回hoto登录表单,否则转到page.xhtml。