拦截JSP页面,校验是否已登录详解及实现代码
拦截JSP页面,校验是否已登录
最近使用struts2做项目,需要拦截JSP以校验是否已经登,但struts2的过滤器链只能过滤action。后来发现在web.xml里可以直接增加javax.servlet.Filter实现类的过滤器,可以过滤JSP。请看代码
Filter实现类
<spanstyle="font-size:18px;">packagecom.common; importjava.io.IOException; importjavax.servlet.Filter; importjavax.servlet.FilterChain; importjavax.servlet.FilterConfig; importjavax.servlet.ServletException; importjavax.servlet.ServletRequest; importjavax.servlet.ServletResponse; importjavax.servlet.http.HttpServlet; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; publicclassLoginFilterextendsHttpServletimplementsFilter{ privatestaticfinallongserialVersionUID=1L; @Override publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain)throwsIOException,ServletException{ HttpServletRequestreq=(HttpServletRequest)request; HttpServletResponseres=(HttpServletResponse)response; Stringpath=req.getContextPath(); StringindexPath=req.getScheme()+"://"+req.getServerName()+":"+req.getServerPort()+path+"/pages/login.jsp"; if(req.getRequestURI().endsWith("login.jsp")) { chain.doFilter(request,response); return; } Objectloginuser=req.getSession().getAttribute("<strong><spanstyle="color:#ff0000;">loginSession</span></strong>"); if(loginuser==null){ res.sendRedirect(indexPath); return; } chain.doFilter(request,response); } @Override publicvoidinit(FilterConfigarg0)throwsServletException{ //TODOAuto-generatedmethodstub } } </span>
登录方法:
<spanstyle="font-size:18px;">publicStringlogin() { Loginlogin=newLogin(); //.......校验登录信息 ActionContextctx=ActionContext.getContext(); Map<String,Object>session=ctx.getSession(); session.put("<strong><spanstyle="color:#ff0000;">loginSession</span></strong>",login); return"success"; }</span>
web.xml配置
<filter> <filter-name>setlog</filter-name> <filter-class>com.common.LoginFilter</filter-class> </filter> <filter-mapping> <filter-name>setlog</filter-name> <url-pattern>/pages/home.jsp</url-pattern> <url-pattern>/pages/channel/*</url-pattern> <url-pattern>/pages/content/*</url-pattern> <url-pattern>/pages/product/*</url-pattern> <url-pattern>/pages/vodtask/*</url-pattern> </filter-mapping>
注意,如果页面上使用了框架,则可能导致session超时后退出到登录页面,此时登录页面显示在框架的某个子页面,解决方法,在登录页面加入如下代码即可。
<spanstyle="font-size:18px;"><scriptlanguage="javascript"> if(top!=window) top.location.href=window.location.href; </script></span>
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!