代码语言:javascript复制Filter过滤器
【过滤器的实现】
1、创建普通java类
2、实现Filter接口
implements Filter
3、实现方法
重写 三个方法
4、设置过滤的资源
@WebFilter("/需要过滤的资源路径")
【过滤器的作用】
截取客户端和服务器之间的请求与响应的信息(可以对这些信息进行操作修改),并对这些信息进行过滤
也可以在过滤器中设置编码格式 就可以达到处理乱码的效果 而不需要逐一修改
【过滤器执行的顺序】(过滤器在文件前面谁先执行)
客户端发起请求->过滤器1-放行->过滤器2-放行->资源->过滤器2->过滤器1->客户端
【过滤器生命周期】
Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法
init(Filterconfig):
代表filter对象初始化方法 filter对象创建时执行
doFilter(ServletRequest,ServletResponse,FilterChain):
代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法
destory():
代表是filter销毁方法 当filter对象销毁时执行该方法1)
代码语言:javascript复制实例:非法访问拦截
此时已存在的条件: 在登录的时候会创建session对象,并将当前用户存入session作用域中 HttpSession session = req.getSession(); session.setAttribute(“myUser”,user1);
import com.hyy.taobao.api.entity.User;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
/**
* 实例:
* 非法访问拦截
*
* 拦截的资源
* 拦截所有资源
* 需要放行的资源
* 不需要登录即可访问的页面
* 1、放行指定页面:不需要登录即可访问的页面(例如登录页面、注册页面)
* 2、放行静态页面:(例如CSS、JS、Image等资源)
* 3、放行指定操作:不需要登录即可进行的操作(如登录操作、注册操作)
* 4、登录状态放行:(如果存在指定的session对象,即为登录状态)
*/
@WebFilter("/过滤(拦截)资源的路径")
public class Filter03 implements Filter {
/**
* 代表filter对象初始化方法 filter对象创建时执行
*
* @param filterConfig
* @throws ServletException
*/
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
/**
* 代表是filter销毁方法 当filter对象销毁时执行该方法
*/
@Override
public void destroy() {
}
/**
* 代表filter执行过滤的核心方法,
* 如果某资源在已经被配置到这个filter进行过滤的话,
* 那么每次访问这个资源都会执行doFilter方法
*
* @param servletRequest tomcat容器在获取到客户端请求时创建的Request和Response对象
* @param servletResponse tomcat容器在获取到客户端请求时创建的Request和Response对象
* @param filterChain ChainFilter链:它可以指向下一个资源,如果还有过滤器,则继续进行下一次的过滤,如果没有过滤器,则会指向资源(servlet)。
* @throws IOException
* @throws ServletException
*/
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 基于HTTP
HttpServletRequest httpServletRequest = (HttpServletRequest)servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
// 得到请求的路径
String path = httpServletRequest.getRequestURI();
// 1、放行指定页面,不需要登录就可与访问的页面(例如登录页面、注册页面)
if (path.contains("/login.jsp") || path.contains("register.jsp")){
filterChain.doFilter(servletRequest,servletResponse);
return;
}
// 2、放行静态页面(例如CSS、JS、Image等资源)
if (path.contains("/js")){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
// 3、放行指定操作:不需要登录即可进行的操作(如登录操作、注册操作)
// 检查你是否在做登录或注册操作 是 放行 否则拦截
if (path.contains("/loginServlet")){
filterChain.doFilter(servletRequest, servletResponse);
return;
}
// 4、登录状态放行:(如果存在指定的session对象,即为登录状态)
// 得到Session对象
User myUser = (User) httpServletRequest.getSession().getAttribute("myUser");
if (myUser != null) {
filterChain.doFilter(servletRequest,servletResponse);
return;
}
httpServletResponse.sendRedirect("index.jsp");
return;;
}
}