简单介绍:有些网页是不能直接访问的,比如有一个项目,有几百个网页都需要你登录才有权限访问,一个一个设置太麻烦,于是设置一个过滤器,让每次访问网页时必须先经过过滤器的身份验证。
具体实现(以是否登录为验证条件):
public class LoginFilter implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc)
throws IOException, ServletException {
long start = System.currentTimeMillis();
HttpServletRequest request = (HttpServletRequest)req;
HttpSession session = request.getSession();
String uri = request.getRequestURI();
String username = (String)session.getAttribute("username");
//所有页面username为空都不能访问,并直接跳转到登录页面,除了login和regiest和Login和Regiest还有一些css/img等功能性页面
if(username == null ) {
if(uri.indexOf("login") != -1 || uri.indexOf("regiest") != -1 || uri.indexOf("Regiest") != -1 || uri.indexOf("Login") != -1 || uri.indexOf("index") != -1
|| uri.indexOf("css") != -1
|| uri.indexOf("images") != -1
|| uri.indexOf("img") != -1
|| uri.indexOf("scripts") != -1
|| uri.indexOf("style") != -1
){
fc.doFilter(req, resp);
}else {
req.getRequestDispatcher("login.jsp").forward(req, resp);
return;
}
}else {
fc.doFilter(req, resp);
}
long end = System.currentTimeMillis();
long time = end - start;
System.out.println(uri+":"+time);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
与jsp页面链接有两种方式:
一、修改web.xml文件:
<filter>
<filter-name>login</filter-name>
<filter-class>com.nandasoft.edu.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>login</filter-name>
<url-pattern>/*</url-pattern>//代表所有页面必须经过验证
</filter-mapping>
二、
@WebFilter(filterName="login", urlPatterns="/*")
加在过滤器中。
用内置对象session存储数据,就实现了过滤器。