先介绍 环境
web.xml 拦截器 代码
<filter>
<filter-name>SessionFilter</filter-name>
<filter-class>cn.com.bsoft.common.SessionFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>gbk</param-value>
</init-param>
<init-param>
<param-name>enable</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SessionFilter</filter-name>
<url-pattern>/communication/*</url-pattern>
</filter-mapping>
(/communication/* )为所有JSP 目录
(SessionFilter)过滤器类 ,过滤器代码
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest hreq = (HttpServletRequest) request;
HttpServletResponse hres = (HttpServletResponse) response;
HttpSession session = hreq.getSession();
if(this.enable) {
request.setCharacterEncoding(this.encodingName);
}
try {
if (session.getAttribute("UserInfo") != null) { // 验证成功,继续处理
filterChain.doFilter(request, response);
} else { // 验证不成功,让用户登录。
hres.sendRedirect("/Communication/index.jsp");
return;
}
} catch (Exception e) {
e.printStackTrace();
}
}
login.jsp(登录页面)
index.jsp(首页)
----------------------------------------------------------------------
情况 :
当我 登录成功进入到首页(index.jsp页面),
然后点 注销 按钮(注销后session会销毁,request.getSession().invalidate();)
执行 hres.sendRedirect("/Communication/login.jsp"); 跳转到登录页面(成功跳转)。
这时候页面显示的是 登录页面(login.jsp)。
在IE浏览器上 点击 网页后退 按钮,它跳到了首页(index.jsp),
但 我的拦截器拦截下来了,过滤器 也执行了hres.sendRedirect("/Communication/login.jsp"); 这句代码,
可是没有执行跳转。当然这个时候session是空的。
还有一种情况:注销后,在IE 地址栏里 直接 访问index.jsp(首页)地址是访问不到的,会被拦截下来 到登录页面。
问题是:hres.sendRedirect("/Communication/login.jsp"); 执行这句代码不一定会跳转页面,有的时候跳转,有的时候不跳转。
我想要的是 浏览器点后退的时候 依然还是在 登录页面,请高手帮忙解决。
------解决方案--------------------------------------------------------
你可以在客户端使用js跳转了
hres.getWriter().print("<script>window.location.replace('login.jsp')</script>");
------解决方案--------------------------------------------------------
else { // 验证不成功,让用户登录。
hres.sendRedirect("/Communication/index.jsp");
return;
}
登录为什么不到login.jsp?