详解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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。