什么是过滤器:
1、过滤器运行在服务器端
2、过滤器必须实现servlet API中的Filter接口
3、Filter通常可以用于以下几种情况:
a、认证
b、记录访问日志
c、加密解密
d、字符编码转换
e、数据压缩
servlet过滤器有关接口:
1、Filter接口
2、FilterChain接口
3、FilterConfig接口
servlet过滤器的开发步骤:
1、编写实现Filter接口的类
2、在web.xml中配置Filter(建议使用配置文件方式,在多个过滤器中,注解无法控制先后顺序,会导致逻辑出问题)
public class SessionFilter implements Filter{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println("过滤器初始化");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
// TODO Auto-generated method stub
//得到request,response后进行处理,把request和response传给下面
//把request和response转换成http协议的
HttpSession session=((HttpServletRequest)request).getSession();
User user=(User)session.getAttribute("user");
HttpServletRequest req=(HttpServletRequest)request;
HttpServletResponse resp=(HttpServletResponse)response;
String url=req.getServletPath();
/*if(user!=null){
((HttpServletResponse)response).sendRedirect("index.jsp");
}else{
((HttpServletResponse)response).sendRedirect("login.jsp");
}*/
//判断用户在session里边是否为空
if(user!=null){
//如果不为空,login界面需要处理,跳转至index.jsp
if("/filter/login.jsp".equals(url)){
resp.sendRedirect("index.jsp");
}else{
chain.doFilter(request, response);
}
//其他界面不需要处理
}else{
//如果为空,login.jsp不需要处理,其他页面需要跳转到login.jsp
if(!"/filter/login.jsp".equals(url)){
resp.sendRedirect("login.jsp");
}else{
//继续向下执行过滤器,或者继续访问
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}