详解Struts2中对未登录jsp页面实现拦截功能
Struts2中拦截器大家都很经常使用,但是拦截器只能拦截action不能拦截jsp页面。这个时候就有点尴尬了,按道理来说没登录的用户只能看login界面不能够通过输入URL进行界面跳转,这显然是不合理的。这里介绍Struts2中Filter实现jsp页面拦截的功能。(有兴趣的人可以去研究Filter过滤器的其它用法,因为利用过滤器也可以实现action拦截的功能)
下面直接上代码,边看边分析实现步骤和原理。
1.web.xml中的配置信息:
SessionInvalidate com.tp.action.SessionCheckFilter //过滤器核心类的class地址checkSessionKey //session中需要检查的keyusers redirectURL //过滤重定向的地址/login.jsp notCheckURLList //不需要过滤的jsp/login.jsp SessionInvalidate //需要过滤的文件*.jsp
这里有几点需要注意的是:
1.过滤器要尽量放在Struts2配置代码的上面。
2.在SessionInvalidate中
3.SessionCheckFilter过滤的核心类:
packagecom.tp.action; importjava.io.IOException; importjava.util.HashSet; importjava.util.Set; importjavax.servlet.Filter; importjavax.servlet.FilterChain; importjavax.servlet.FilterConfig; importjavax.servlet.ServletException; importjavax.servlet.ServletRequest; importjavax.servlet.ServletResponse; importjavax.servlet.http.HttpServletRequest; importjavax.servlet.http.HttpServletResponse; importjavax.servlet.http.HttpSession; /** *用于检测用户是否登陆的过滤器,如果未登录,则重定向到指的登录页面配置参数checkSessionKey需检查的在Session中保存的关键字 *redirectURL如果用户未登录,则重定向到指定的页面,URL不包括ContextPathnotCheckURLList *不做检查的URL列表,以分号分开,并且URL中不包括ContextPath */ publicclassSessionCheckFilterimplementsFilter{ protectedFilterConfigfilterConfig=null; privateStringredirectURL=null; privateSetnotCheckURLList=newHashSet (); privateStringsessionKey=null; @Override publicvoiddestroy(){ notCheckURLList.clear(); } @Override publicvoiddoFilter(ServletRequestservletRequest, ServletResponseservletResponse,FilterChainfilterChain) throwsIOException,ServletException{ HttpServletRequestrequest=(HttpServletRequest)servletRequest; HttpServletResponseresponse=(HttpServletResponse)servletResponse; HttpSessionsession=request.getSession(); if(sessionKey==null){ filterChain.doFilter(request,response); return; } if((!checkRequestURIIntNotFilterList(request)) &&session.getAttribute("users")==null){ response.sendRedirect(request.getContextPath()+redirectURL); return; } filterChain.doFilter(servletRequest,servletResponse); } privatebooleancheckRequestURIIntNotFilterList(HttpServletRequestrequest){ Stringuri=request.getServletPath() +(request.getPathInfo()==null?"":request.getPathInfo()); Stringtemp=request.getRequestURI(); temp=temp.substring(request.getContextPath().length()+1); //System.out.println("是否包括:"+uri+";"+notCheckURLList+"=="+notCheckURLList.contains(uri)); returnnotCheckURLList.contains(uri); } @Override publicvoidinit(FilterConfigfilterConfig)throwsServletException{ this.filterConfig=filterConfig; redirectURL=filterConfig.getInitParameter("redirectURL"); sessionKey=filterConfig.getInitParameter("checkSessionKey"); StringnotCheckURLListStr=filterConfig .getInitParameter("notCheckURLList"); if(notCheckURLListStr!=null){ System.out.println(notCheckURLListStr); String[]params=notCheckURLListStr.split(","); for(inti=0;i 到这里过滤器的功能就实现了。再重申一下web.xml中配置的信息,需要好好检查检查因为那里是过滤器是否成功的关键。
总结
本文关于详解Struts2中对未登录jsp页面实现拦截功能的介绍就到这里,希望对大家有所帮助。欢迎参阅:struts2开发流程及详细配置 Struts2修改上传文件大小限制方法解析等。有什么问题可以随时留言,小编会及时回复大家。感谢朋友们对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。