判断是否登录的拦截器SessionFilter



判断是否登录的拦截器SessionFilter。

需要写个拦截器,当用户没有登录的时候某些页面是不能访问的
用法将需要登录后访问的文件全部放在一个文件夹中,这里是logined文件夹

Java代码 复制代码 收藏代码
  1. import java.io.IOException;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.StringTokenizer;
  5. import javax.servlet.Filter;
  6. import javax.servlet.FilterChain;
  7. import javax.servlet.FilterConfig;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.ServletRequest;
  10. import javax.servlet.ServletResponse;
  11. import javax.servlet.http.HttpServletRequest;
  12. import javax.servlet.http.HttpServletResponse;
  13. import com.tlt.app.bean.Useraccount;
  14. import com.tlt.app.util.Constants;
  15. public class SessionFilter implements Filter{
  16.     private List list = new ArrayList();
  17.     public void destroy() {
  18.         // TODO Auto-generated method stub
  19.     }
  20.     public void doFilter(ServletRequest request, ServletResponse response,
  21.             FilterChain chain) throws IOException, ServletException {
  22.         // TODO Auto-generated method stub
  23.         String path=((HttpServletRequest)request).getServletPath();
  24. //      System.out.println(“path=”+path);
  25.         for(int i=0;i<list.size();i++){
  26.             if(path.indexOf((String)list.get(i))!=-1){//需要拦截
  27.                 if (((HttpServletRequest) request).getSession().getAttribute(Constants.USER_KEY) == null) {//session不存在需要拦截
  28.                     String contextPath=((HttpServletRequest)request).getContextPath();
  29. //                  System.out.println(“ContextPath=”+contextPath);
  30.                     ((HttpServletResponse)response).sendRedirect(contextPath+”/login.jsp?toPath=”+servletPath);//记录下登录后需要跳转到的页面,比如:/logined/account.jsp
  31.                 }else{
  32.                     chain.doFilter(request, response);
  33.                 }
  34.                 break;
  35.             }else{
  36.                 chain.doFilter(request, response);
  37.             }
  38.         }
  39.     }
  40.     public void init(FilterConfig filterConfig) throws ServletException {
  41.         // TODO Auto-generated method stub
  42.          //初始化需要拦截的文件夹
  43.          String include = filterConfig.getInitParameter(“include”);
  44.          if (include != null) {
  45.                 StringTokenizer st = new StringTokenizer(include, ”,”);
  46.                 list.clear();
  47.                 while (st.hasMoreTokens()) {
  48.                     list.add(st.nextToken());
  49.                 }
  50.          }
  51.     }
  52. }
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.tlt.app.bean.Useraccount;
import com.tlt.app.util.Constants;

public class SessionFilter implements Filter{
	private List list = new ArrayList();

	public void destroy() {
		// TODO Auto-generated method stub
	}

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {
		// TODO Auto-generated method stub
		String path=((HttpServletRequest)request).getServletPath();
//		System.out.println("path="+path);
		for(int i=0;i<list.size();i++){
			if(path.indexOf((String)list.get(i))!=-1){//需要拦截
				if (((HttpServletRequest) request).getSession().getAttribute(Constants.USER_KEY) == null) {//session不存在需要拦截
					String contextPath=((HttpServletRequest)request).getContextPath();
//					System.out.println("ContextPath="+contextPath);
					((HttpServletResponse)response).sendRedirect(contextPath+"/login.jsp?toPath="+servletPath);//记录下登录后需要跳转到的页面,比如:/logined/account.jsp
				}else{
					chain.doFilter(request, response);
				}
				break;
			}else{
				chain.doFilter(request, response);
			}
		}

	}

	public void init(FilterConfig filterConfig) throws ServletException {
		// TODO Auto-generated method stub
		 //初始化需要拦截的文件夹
		 String include = filterConfig.getInitParameter("include");
		 if (include != null) {
				StringTokenizer st = new StringTokenizer(include, ",");
				list.clear();
				while (st.hasMoreTokens()) {
					list.add(st.nextToken());
				}
		 }

	}

}

可以使用多个文件夹,只需要将<param-value>中的值之间用“,”隔开。

Xml代码 复制代码 收藏代码
  1. <filter>
  2.         <filter-name>sessionFilter</filter-name>
  3.         <filter-class>com.tlt.app.filter.SessionFilter</filter-class>
  4.         <init-param>
  5.             <param-name>include</param-name>
  6.             <param-value>logined</param-value>
  7.         </init-param>
  8.     </filter>
  9.     <filter-mapping>
  10.         <filter-name>sessionFilter</filter-name>
  11.         <url-pattern>/*</url-pattern>
  12.     </filter-mapping>