web.xml 配置文件
authorFilter
hhu.edu.cn.filter.AuthFilter
redirect
/Test/login.jsp
disable
N
includes
login.jsp;
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; } }