我想实现web应用程序的session失效后自动跳转到login.jsp页面,该如何实现,不想在每个jsp页面都加判断,或加jsp标签的方法实现。
最后是通过监听器来实现,在网上看了好长时间,也没有真正的解决办法.
[b]问题补充:[/b]
我想实现web应用程序的session失效后自动跳转到login.jsp页面,该如何实现,不想在每个jsp页面都加判断,或者在每个jsp页加自定义标签的方法实现。
1.最好是通过监听器或过滤器来实现,在网上看了好长时间,也没有真正的解决办法.
2.如果用过滤器,用户不做任何操作,30分钟后系统是否会自动跳转?
用过滤器,用户不做任何操作,session过期后也不会自动跳转,但是用户的任何操作都会导致自动跳转。如果想让用户不动也能自动跳转,可以定时刷新客户端。
通过filter实现,用filter过滤所有请求,在filter中判断session中是否有你存的用户信息,如果没有就转到一个logout.jsp页面
你实现HttpSessionListener接口。。
实现sessionDestroyed方法
比如:
public void sessionDestroyed(HttpSessionEvent event){
HttpServletRequest request=event.getRequest();
HttpServletResponse response = event.getResponse();
event.getSession().getServletContext().getRequestDispatcher( "/login.jsp ").forward(request,response);
}
写一个filter然后判断是否存在用户,没有跳转到logout.jsp
[code="java"]
MyFilter
IsLogin
MyFilter
/*
[/code]
[code="java"]
public class IsLogin implements Filter {
/**
* Take this filter out of service.
*/
public void destroy() {
}
/**
* Select and set (if specified) the character encoding to be used to
* interpret request parameters for this request.
*/
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)throws IOException, ServletException {
request.getSession.getAttritube("user");
if(user==null){
跳转...
}
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
[/code]
上面是我随手写的,可能会有一点小问题..调试下
写个filter实现吧:
[code="java"]public class AuthenticationFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
if (httpServletRequest.getSession(true).getAttribute("user") == null) {
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
return;
}
filterChain.doFilter(servletRequest, servletResponse);
}[/code]
web.xml
[code="xml"]
authenticationFilter
com.xxx.filter.AuthenticationFilter
authenticationFilter
/*
[/code]
晕,这么快
[quote]2.如果用过滤器,用户不做任何操作,30分钟后系统是否会自动跳转? [/quote]
不管你在服务器端做什么手脚,客户端都不会自动跳转的,因为HTTP是无状态的,要想客户端自动跳转,就必须在页面上做手脚
用户不做操作是没办法响应的,
因为http协议就是请求响应的原则,你请求了才会响应