JavaEE:过滤器

简介: JavaEE:过滤器

🔖过滤器的概念


过滤器是JavaEE中对请求和响应进行拦截的技术,通过定义一个类并实现Filter接口,可以让某些请求地址在到达servlet之前进入到指定的过滤器中,从而实现统一的处理,例如编码过滤、权限验证等进行统一过滤。

过滤器的作用:

⦁  将前端发送的请求先进入指定过滤器进行“筛选”,或者设置公共的属性、配置、进行公共处理.

   ➱  提高代码复用性,提高可维护性    

⦁  可进行逻辑判断,若不满足条件,直接响应前端无需进入Servlet处理程序 " 请求拦截 "

⦁  一个过滤器可以配置给多个资源使用

⦁  一个资源也可以配置多个过滤器,按照配置顺序调用

🔖过滤器的实现方式


Servlet 的API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截.


具体实现步骤:

第一步:新建一个包,结合类名,让这个类实现 Filter接口.


由于过滤器是一个独立的功能,所以我们需要新建一个包(Filter),这里我们以创建一个编码过滤器为例,注意命名规范,以Filter结尾。


< 注意是 java.servlet .* 这个包里的 Filter接口 >



第二步:重写 Filter接口中的抽象方法.

import javax.servlet.*;
import java.io.IOException;
 
public class EncodingFilter implements Filter {
 
    /*
    初始化过滤器
     */
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
 
    }
 
    /*
     执行过滤器操作的方法
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
 
    }
    /*
    过滤器销毁时执行
     */
    @Override
    public void destroy() {
 
    }
 
}

补充:

这里其实只重写 doFilter方法就可以了,init 和destory是默认方法且我们日常学习阶段很少用到

< init 和 destory会默认调用父类的方法 >


第三步:在 doFilter方法中设置字符集,并让过滤器继续向后执行.

将下图代码写在 doFilter方法中

        //设置请求编码集
        servletRequest.setCharacterEncoding("utf-8");
        //设置响应编码集
        servletResponse.setContentType("text/html;charset=utf-8");
        //让请求离开过滤器继续向下执行,下一个可能是过滤器或目标访问的servlet
        filterChain.doFilter(servletRequest,servletResponse);

参考下图:


第四步:在web.xml文件中配置过滤器.

把 servlet标签换成 filter标签即可,可参考下图代码

<!--    注册编码过滤器-->
    <filter>
        <filter-name>encoding</filter-name>
        <filter-class>webserver.filter.EncodingFilter</filter-class>
    </filter>
<!--    配置哪些地址可以进入到编码过滤器-->
    <filter-mapping>
        <filter-name>encoding</filter-name>
        <url-pattern>/*</url-pattern>  <!-- /* 表示所有向后端发送的请求,都进入到编码过滤器中-->
    </filter-mapping>

参考下图:

通过编码过滤器的设置,我们就不需要在每个Servlet接收post请求时都设置解码字符编码了,前端发送的请求会先进入到我们的编码过滤器,提高代码复用性




本次的分享就到此为止了,希望我的分享能给您带来帮助,创作不易也欢迎大家三连支持,你们的点赞就是博主更新最大的动力! 如有不同意见,欢迎评论区积极讨论交流,让我们一起学习进步! 有 相关问题也可以私信博主,评论区和私信都会认真查看的,我们下次再见



海漫浩浩,我亦苦作舟!大家一起学习,一起进步!  

相关文章
|
存储 Linux 网络虚拟化
RISC-V Linux启动之页表创建分析
RISC-V Linux启动之页表创建分析
|
6月前
|
JSON 监控 API
深入研究:shopee商品详情API接口Python攻略
Shopee 商品详情 API 是用于获取 Shopee 平台商品详细信息的接口,支持开发者提取商品标题、价格、库存、描述和图片等多维度数据。该接口适用于电商数据分析、比价工具开发及商品监控等场景。请求方式为 GET,需提供 itemid(商品 ID)和 shopid(店铺 ID),返回格式为 JSON。部分功能可能需要 API 密钥或访问令牌认证。以马来西亚站点为例,URL 为 shopee.com.myapi/v4/item/get,不同国家站点域名可能有所不同。
|
8月前
|
存储 安全 API
LarkXR云渲染平台:如何实现应用管理、访问权限控制,并与业务系统嵌入集成
本文讨论了功能完备的PaaS平台LarkXR ,重点介绍其“应用管理”功能。关键要点包括:​ 平台级安全访问控制:构建LarkXR平台开放页面到公网时,可将特定应用设为私有应用,通过设置口令、生成分享链接、禁用分享链接等操作控制访问权限。​ 打造SaaS平台:将LarkXR“工作空间”功能引入业务系统,分别设置用户和应用的工作空间,通过工作空间ID筛选用户可访问的应用列表。​ 接入业务系统:业务系统管理用户和应用,动态展示应用列表,在LarkXR为默认工作空间设置密钥,结合时间戳确保应用访问安全。​ 多业务系统接入与管理:在平台级通过创建不同组别划分渲染池和应用池,绑定不同网络环境的渲染机器。
|
10月前
|
人工智能 Java 程序员
一文彻底搞清楚C语言的函数
本文介绍C语言函数:函数是程序模块化的工具,由函数头和函数体组成,涵盖定义、调用、参数传递及声明等内容。值传递确保实参不受影响,函数声明增强代码可读性。君志所向,一往无前!
456 1
一文彻底搞清楚C语言的函数
|
人工智能
写歌词的技巧和方法:打造完美歌词结构,妙笔生词AI智能写歌词软件
写歌词的技巧包括:开头吸引人,主体逻辑清晰,结尾画龙点睛。使用《妙笔生词智能写歌词软件》的AI功能,如智能写词、押韵优化等,可助你克服创作瓶颈,打造完美歌词结构,适用于民谣、摇滚、流行等多种风格。
|
JSON API 数据安全/隐私保护
京东商品详情API接口获取(jd.item_get)和展示
京东商品详情API接口使用指南:首先注册成为开发者,获取Key和Secret;接着申请API权限,通过审核后获得AppKey和AppSecret;然后研读API文档,了解接口规则;随后根据文档构建API请求,设置必要参数;最后发送请求并处理返回的JSON数据。
|
安全 Java 测试技术
code review 正确方式
code review 正确方式
345 1
|
运维 Kubernetes 调度
在K8S中,Pod亲和性和反亲和性作用区别有哪些?该如何使用?
在K8S中,Pod亲和性和反亲和性作用区别有哪些?该如何使用?
|
存储 Prometheus 监控
prometheus实战篇:prometheus相关概念
在安装好Prometheus后,会暴露一个/metrics的http服务(相当于安装了prometheus_exporter),通过配置,Prometheus就可以采集到这个/metrics下的所有监控样本数据.
|
安全 编译器 C语言
C语言安全编程:避免缓冲区溢出等安全。
C语言安全编程:避免缓冲区溢出等安全。