如题!
-->监听到session销毁,-->能否用过滤器实现跳转. 等待答案.
-->监听到session销毁,-->能否用过滤器实现跳转. 等待答案.
解决方案 »
- struts标签解析问题
- 怎么实现打印表格??急!!!!
- 网站大幅度改版,请大家多给建议。
- 想在执行后台java程序的过程中在web页面上弹出一个confirm窗口,可能么?
- 如何判断一句话的ASCII码长度?
- java入门问题
- java连接数据库的问题
- 谁有jxl.jar能给我一份吗?不甚感激. [email protected]
- 高分求JAVA Servlet下语音聊天源代码(200分)分数不够可另开贴散分
- 我的entry bean 连接数据库有问题,但,weblogic 的jndi却可以激活,救火呀-----在线等候...
- java struts2的session怎么清除?也就是用户单击退出系统时怎么清除session?
- DispatchAction中getServlet()返回空的问题
能。
如果用了过滤器,你根本就不需要监听器。
你可以把过滤器的url-pattern设为/*
这样它会过滤每一次请求
然后你在过滤器中判断session中的数据是否存在,若不存在则说明会话失效啦,转发到登录页面去就可以了。形如:HttpServletRequest req = (HttpServletRequest) request;
HttpSession session = req.getSession( false );
if( session==null || session.getAttribute( "..." ) == null )
{
req.getRequestDispatcher( "/login.jsp" ).forward( request, response );
return;
}
但如果楼主的意思是:
当监听器监听到session失效时立即让客户端跳转到登录页面(在客户端没发出任何请求的情况下),则绝对是不可能的。如果楼主是这个目的,就不必听人忽悠啦。呵呵。
package yudylaw.bank.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;public class UserLoginFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest req = (HttpServletRequest)request;
if(!req.isRequestedSessionIdValid()){
System.out.println("页面过期");
req.getRequestDispatcher("index.htm").forward(request, response);
}else if(null!=req.getSession()&&null!=req.getSession().getAttribute("account")){
System.out.println("account在session中");
chain.doFilter(request, response);
}
else{
System.out.println("非法访问被过滤");
req.getRequestDispatcher("index.htm").forward(request, response);
}
} public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub }}这样的代码吗?
if(request.getSession(false)==null){
//返回登录页
}
对,request.getSession(false),我一直用request.getSession()。
-------------------web.xml配置:
<filter>
<filter-name>sesfilter</filter-name>
<filter-class>com.yc.plat.util.SessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>sesfilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
------------------SessionFilter.java--------------------------
package com.yc.plat.util;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class SessionFilter implements Filter { public void init(FilterConfig filterConfig)throws ServletException{
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws ServletException,IOException{
HttpServletRequest req = (HttpServletRequest)request;
HttpServletResponse res = (HttpServletResponse)response;
boolean isValid=true;
//check attribute
isValid=req.getSession(false)==null;
if(isValid){
req.getSession().getServletContext().getRequestDispatcher ("/index.jsp").forward(req,res);//页面前的'/'一定不能省略
}else {
chain.doFilter(request,response);
}
}
public void destroy(){
}
}