java中filter實現用戶登錄管理

web.xml 配置文件

<filter>
  <filter-name>authorFilter</filter-name>
  <filter-class>hhu.edu.cn.filter.AuthFilter</filter-class>
  <init-param>
   <param-name>redirect</param-name>
   <param-value>/Test/login.jsp</param-value>
  </init-param>
  <init-param>
   <param-name>disable</param-name>
   <param-value>N</param-value>
  </init-param>
  <init-param>
   <param-name>includes</param-name>
   <param-value>login.jsp;</param-value>
  </init-param>
 </filter>

 

filter類:

package hhu.edu.cn.filter;

import java.io.IOException;

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.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class AuthFilter implements Filter {
 // 配置文件
 private FilterConfig config;
 private static Log log = LogFactory.getLog(AuthFilter.class);

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

 }

 public void doFilter(ServletRequest request, ServletResponse response,
   FilterChain chain) throws IOException, ServletException {
  // request
  HttpServletRequest req = (HttpServletRequest)request;
  // response
  HttpServletResponse res = (HttpServletResponse)response;
  String include = config.getInitParameter("includes");
  String disable = config.getInitParameter("disable");
  String redirect = config.getInitParameter("redirect");
  String url = req.getServletPath();
  
  // 非驗證網頁名的獲取
  String[] includes = include.split(";");
  
  if ("Y".equals(disable)) {
   chain.doFilter(request, response);
  } else {
   if (isNoAuth(url, includes)) {
    chain.doFilter(request, response);
   } else {
    HttpSession session = req.getSession();
    String isLogin = req.getParameter("isLogin");
    if ("1".equals(isLogin)) {
     session.setAttribute("user", "user");
     Cookie cookie = new Cookie("user", "Usr");
     cookie.setMaxAge(24*60*60*1000);
     res.addCookie(cookie);
    }
    String user = (String)session.getAttribute("user");
    Cookie[] cookies = req.getCookies();
    if (cookies != null) {
     for (int i = 0; i < cookies.length; i++) {
      if (cookies[0].getName().equals("user")) {
       chain.doFilter(request, response);
      }
     }
    }
    if (user == null) {
     res.sendRedirect(redirect);
    } else {
     chain.doFilter(request, response);
    }
   }
  }
 }

 public void init(FilterConfig filterConfig) throws ServletException {
  
  if (log.isDebugEnabled()) {
   log.debug("filter is intialized!");
  }
  // 初始化配置文件
  this.config = filterConfig;
 }
 
 private static boolean isNoAuth(String url, String[] urls) {
  if (urls == null || urls.length == 0) {
   return false;
  } else {
   for (int i = 0; i < urls.length; i++) {
    if (url.contains(urls[i])) {
     return true;
    } else {
     return false;
    }
   }
  }
  return  false;
 }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章