Servlet学习——过滤器

简介: Servlet学习——过滤器

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)

实例:非法访问拦截

此时已存在的条件:

在登录的时候会创建session对象,并将当前用户存入sessi\on作用域中

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;;
    }
}
相关文章
|
小程序 Java 应用服务中间件
【JavaWeb学习】—Servlet(十三)
【JavaWeb学习】—Servlet(十三)
|
3月前
|
JavaScript Java 容器
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
本文简要回顾了Servlet过滤器Filter的概念和使用,通过实例演示了如何创建过滤器以过滤请求字符编码,并解释了在web.xml中配置过滤器时使用`/`、`/*`和`/**`的区别。
servlet过滤器Filter简要回顾-过滤请求字符编码,/和/*和/**的区别
|
4月前
|
存储 前端开发 Java
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
该文章展示了如何使用Servlet过滤器(Filter)通过注解方式创建一个网站访问人数统计功能,通过`@WebFilter`注解定义过滤器及其URL模式,并在`doFilter`方法中实现计数逻辑,将访问次数存储在`ServletContext`中,最后在JSP页面展示访问人数。
servlet过滤器--使用过滤器统计网站访问人数的计数(注解形式)
|
4月前
|
C# 数据可视化 开发者
WPF开发者福音:深度解析OxyPlot与LiveCharts图表库,轻松实现数据可视化不再是难题!
【8月更文挑战第31天】在WPF应用中,数据可视化对提升用户体验至关重要。本文介绍并演示了两种流行图表库OxyPlot和LiveCharts的集成与使用方法。OxyPlot是一款适用于.NET应用的开源图表库,提供多种图表类型,易于集成。LiveCharts则以其丰富的图表类型和动画效果,特别适合实时数据展示。通过具体代码示例,本文展示了如何利用这两种图表库创建折线图和柱状图,并详细说明了安装和配置步骤。希望本文能帮助开发者在WPF应用中轻松实现高效、美观的数据可视化。
214 0
|
4月前
|
监控 前端开发 Java
揭秘Web开发神器:Servlet、过滤器、拦截器、监听器如何联手打造无敌博客系统,让你的用户欲罢不能!
【8月更文挑战第24天】在Java Web开发中,Servlet、过滤器(Filter)、拦截器(Interceptor,特指Spring MVC中的)及监听器(Listener)协同工作,实现复杂应用逻辑。以博客系统为例,Servlet处理文章详情请求,过滤器(如LoginFilter)检查登录状态并重定向,Spring MVC拦截器(如LoggingInterceptor)提供细粒度控制(如日志记录),监听器(如SessionListener)监控会话生命周期事件。这些组件共同构建出高效、有序的Web应用程序。
41 0
|
6月前
|
API
servlet研究学习总结--OutputStream和PrintWriter的区别
servlet研究学习总结--OutputStream和PrintWriter的区别
235 1
|
7月前
|
容器
Servlet 教程 之 Servlet 编写过滤器 6
该教程介绍了如何在Servlet中编写过滤器。可以创建多个过滤器,如AuthenFilter和LogFilter,并通过不同的映射进行配置。过滤器的应用顺序由web.xml中filter-mapping的顺序决定,可通过调整顺序改变过滤器执行的先后。
34 3
|
7月前
|
Java 容器
Servlet 教程 之 Servlet 编写过滤器 2
Servlet过滤器教程:实现Filter接口,包含3个核心方法。1) doFilter用于实际过滤,处理匹配URL的请求,调用FilterChain处理后续过滤。2) init方法在应用启动时被调用,初始化filter,从FilterConfig获取配置信息。3) destroy方法在过滤器销毁前执行,释放资源。
35 2
|
7月前
|
Java
Servlet 教程 之 Servlet 编写过滤器 3
`LogFilter` 是一个 Servlet 过滤器示例,它打印网站名称并传递请求至过滤链。当与 `DisplayHeader` Servlet(显示 HTTP 头信息)配合使用时,提供基础过滤器概念的理解。过滤器在请求处理前可添加额外功能或修改输入,而 `doGet` 方法则用于响应 GET 请求,展示请求头信息。
25 2
|
7月前
|
XML 数据格式
Servlet 教程 之 Servlet 编写过滤器 4
在Servlet教程中,学习如何编写过滤器。在`web.xml`配置文件中,创建一个名为`LogFilter`的过滤器,类为`com.baidu.test.LogFilter`,设置初始化参数`Site`为`百度`。将过滤器映射到`/*`,确保所有请求都会经过此过滤器。同时定义了一个名为`DisplayHeader`的Servlet,映射到`/TomcatTest/DisplayHeader`路径。
28 1