当前位置: 首页 > news >正文

郑州做网站外包的公司有哪些优化营商环境 助推高质量发展

郑州做网站外包的公司有哪些,优化营商环境 助推高质量发展,手机网站建设项目,网站规划与网页设计Filter,过滤器,属于Servlet规范,并不是Spring独有的。其作用从命名上也可以看出一二,拦截一个请求,做一些业务逻辑操作,然后可以决定请求是否可以继续往下分发,落到其他的Filter或者对应的Servl…

Filter,过滤器,属于Servlet规范,并不是Spring独有的。其作用从命名上也可以看出一二,拦截一个请求,做一些业务逻辑操作,然后可以决定请求是否可以继续往下分发,落到其他的Filter或者对应的Servlet
简单描述下一个http请求过来之后,一个Filter的工作流程:

  • 首先进入filter,执行相关业务逻辑
  • 若判定通行,则进入Servlet逻辑,Servlet执行完毕之后,又返回Filter,最后在返回给请求方
  • 判定失败,直接返回,不需要将请求发给Servlet

image.png
这次测试用到的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>3.0.7</version>
</dependency><!-- MySQL Connector -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.11</version>
</dependency><!-- Lombok -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.32</version><scope>provided</scope>
</dependency><!-- MyBatis-Plus -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-spring-boot3-starter</artifactId><version>3.5.5</version>
</dependency><!-- Spring Boot Starter JDBC -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId><version>3.3.0</version>
</dependency><!-- HikariCP -->
<dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId><version>5.0.0</version>
</dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.1</version><scope>compile</scope>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>RELEASE</version><scope>compile</scope>
</dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-test</artifactId><version>6.0.9</version>
</dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-test</artifactId><version>3.0.7</version>
</dependency><!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.47</version>
</dependency></dependencies>

在Spring中,如果需要定义一个过滤器,直接实现Filter接口即可

package com.hayaizo.transactional.filter;import com.alibaba.fastjson.JSON;
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import jakarta.servlet.http.HttpServletRequest;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;import java.io.IOException;@Slf4j
@WebFilter
public class ReqFilter implements Filter {public ReqFilter() {System.out.println("init reqFilter");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;log.info("url={}, params={}", req.getRequestURI(), JSON.toJSONString(req.getParameterMap()));chain.doFilter(req, response);}@Overridepublic void destroy() {}
}

实现一个自定义的Filter容易,一般有两个步骤

  • 实现 Filter 接口
  • 在doFilter方法中添加业务逻辑,如果允许访问继续,则执行chain.doFilter(req, response);; 不执行上面这一句,则访问到此为止

接下来的一个问题就是如何让我们自定义的Filter生效,在SpringBoot项目中,有两种常见的使用方式

  • @WebFilter
  • 包装Bean: FilterRegistrationBean

那么如何让@WebFilter生效呢?

在Spring的启动类上添加@ServletComponentScan注解即可。

image.png
WebFilter常用属性如下,其中urlPatterns最为常用,表示这个filter适用于哪些url请求(默认场景下全部请求都被拦截)
@WebFilter注解是Java Servlet规范中用于定义过滤器的注解。它有多个属性,每个属性都有特定的类型和用途。以下是@WebFilter注解的属性、类型和用途的表格:

属性名类型用途
filterNameString指定过滤器的名称。
urlPatternsString[]指定过滤器的URL模式(可以是多个)。
valueString[]等同于urlPatterns,是一个快捷方式(不能同时使用urlPatternsvalue)。
servletNamesString[]指定过滤器应用到的Servlet名称。
dispatcherTypesDispatcherType[]指定过滤器应用到的调度类型,如REQUEST, FORWARD, INCLUDE, ERROR, ASYNC
initParamsWebInitParam[]指定过滤器的初始化参数。
asyncSupportedboolean指定过滤器是否支持异步操作,默认为false
descriptionString过滤器的描述信息。
displayNameString过滤器的显示名称。
smallIconString过滤器的小图标。
largeIconString过滤器的大图标。

下面给出一个具体例子来更好的理解这些注解的使用方法和含义

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;// 定义一个过滤器,使用@WebFilter注解
@WebFilter(filterName = "ExampleFilter", urlPatterns = {"/example/*"}, dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}, initParams = {@WebInitParam(name = "param1", value = "value1"),@WebInitParam(name = "param2", value = "value2")},asyncSupported = true,description = "This is an example filter",displayName = "Example Filter"
)
public class ExampleFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 获取初始化参数String param1 = filterConfig.getInitParameter("param1");String param2 = filterConfig.getInitParameter("param2");System.out.println("Filter initialized with parameters: " + param1 + ", " + param2);}@Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)throws IOException, ServletException {// 在请求处理之前执行的代码System.out.println("ExampleFilter is filtering the request...");// 继续执行请求chain.doFilter(request, response);// 在响应返回给客户端之前执行的代码System.out.println("ExampleFilter has filtered the response...");}@Overridepublic void destroy() {// 清理资源System.out.println("ExampleFilter is being destroyed...");}
}
  • filterName 指定了过滤器的名称为 “ExampleFilter”。
  • urlPatterns 指定了过滤器应用于以 “/example/” 开头的URL。
  • dispatcherTypes 指定了过滤器应用于 REQUESTFORWARD 类型的请求调度。
  • initParams 指定了两个初始化参数 “param1” 和 “param2” 及其对应的值。
  • asyncSupported 指定过滤器支持异步操作。
  • description 提供了过滤器的描述信息。
  • displayName 指定了过滤器的显示名称。

对于执行顺序
结论:对于被Spring管理的Filter过滤器可以使用@Order注解来设置执行顺序
也可以使用FilterRegistrationBean来包装自定义的Filter

@Beanpublic FilterRegistrationBean<ReqFilter> filterRegistrationBean(ReqFilter reqFilter) {FilterRegistrationBean<ReqFilter> filterRegistrationBean = new FilterRegistrationBean<>();filterRegistrationBean.setFilter(reqFilter);filterRegistrationBean.addUrlPatterns("/*");filterRegistrationBean.setOrder(2147483647);return filterRegistrationBean;}

此外格外注意, @WebFilter声明的Filter,优先级为2147483647(最低优先级)

http://www.wooajung.com/news/27989.html

相关文章:

  • 网站建设z亿玛酷1订制2022年seo最新优化策略
  • 网站开发和软件竞价排名点击
  • 山东网站seo网络工程师
  • 深圳本地网站建设石家庄seo按天扣费
  • wordpress文章页面title东莞seo整站优化火速
  • 广州做网站设计百度推广客户端app
  • 烟台哪家公司可以做网站军事新闻头条
  • 建站公司哪家好 知道万维科技百度信息流效果怎么样
  • 合肥模板网站建设软件百度竞价投放
  • 肇庆疫情最新消息抖音seo怎么做的
  • 成都网站设计成功柚v米科技电商网站开发平台
  • 网站备案号在哪里电商线上推广渠道
  • 东莞品牌网站建设多少钱站长工具国产
  • 国内优秀的企业网站手机系统优化软件
  • 免费产品网站建设谷歌广告投放教程
  • 手机网站开发 视频手机怎么制作网页
  • 淄博哪有培训做网站的中国十大经典广告
  • 域名空间网站怎么做关键词挖掘工具免费
  • 做网站代理需要办什么营业执照开源seo软件
  • 佛山做网站制作google搜索优化方法
  • 网站上怎么做星星评分北京seo代理商
  • 番禺做网站要多少钱seo技术培训教程视频
  • 政府网站建设开题报告google广告投放
  • 商务类网站b2b多平台一键发布
  • 做网站怎么赚钱吗企业网站制作价格
  • 全国做临期进口食品的网站cba赛程
  • 一个学校怎么制作网站百度提交入口网站
  • 宁波大型网站建设百度账号免费注册
  • crm系统全套解决方案广东seo网站设计
  • 优秀建筑模型案例作品seo基础视频教程