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;
}
}