Filter过滤器实现登录检查

 

主要利用filter过滤掉未经登录而直接跳转到非登录访问页面。代码而言的话并不难,只是有几点问题需要注意一下。
1.使用filter需要配置web.xml,如果是/*那么在拦截后的页面会连带jsp页面里的js和css一并拦截住。
解决办法是jsp放在jsppage这个文件下,其他css、js并列。配置的时候就/jsppage/*。
还有个办法是在dofilter里面判断在request域拿到url,进行比对,然后过滤。
 
2.需要设置哪些页面是你不想拦截的【假设所有的页面都放在jsppage内】。
 
代码见下:
LoginFilert.java
public class LoginFilter extends HttpServlet implements Filter {
 
public void doFilter(ServletRequest sRequest, ServletResponse sResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) sRequest;
HttpServletResponse response = (HttpServletResponse) sResponse;
HttpSession session = request.getSession();
String url = request.getServletPath();
String contextPath = request.getContextPath();
if (url.equals("")){
url += "/";
}
if ((url.startsWith("/") && !url.startsWith("/jspPage/login"))) {// 若访问后台资源
// 设置不需要过滤的页面
if (url.endsWith("about.jsp")) {
filterChain.doFilter(sRequest, sResponse);
return;
}
// 过滤到login
String admin = (String) session.getAttribute("admin_name");
if (admin == null) {// 转入管理员登陆页面
response.sendRedirect(contextPath + "/jspPage/login.jsp");
return;
}
}
filterChain.doFilter(sRequest, sResponse);
}
 
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
 
web.xml  
 
    
         loginFilter
           
         util.LoginFilter     
        
       
         loginFilter  
         /jspPage/*  
原文地址:https://www.cnblogs.com/lvdongjie/p/4346419.html