首页 > 其他分享 >@Component与@WebFilter会路径冲突

@Component与@WebFilter会路径冲突

时间:2023-05-30 12:55:08浏览次数:45  
标签:String 路径 Component Filter urlPatterns 过滤器 WebFilter

@WebFilter和@Component
本文你主要讲解@WebFilter注解和@Component以及在使用过程中遇到的坑


这是代码中出现的一个问题。这里讲一下原因

@WebFilter
1.基本概念:
@WebFilter用于将一个类声明为过滤器,该注解将会在部署时候被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的常用属性(以下所有属性均为可选属性,但是value、urlPatterns、servletNames三者必须至少包含一个,且value和urlPatterns不能共存,如果同同时制定,通常忽略value的值)

属性名 类型 描述
filterName String 指定过滤器的name属性,等价于< filter-name>
value String[] 该属性等价于urlPatterns属性,但是两个不应该同时使用
urlPatterns String[] 指定一组过滤器的URL匹配模式。等价于< url-pattern>
sevletNames String[] 指定过滤器将用于哪些servlet。取值是@WebServlet中的name属性的取值,或者是web.xml中< servlet-name>
dispatcherTypes DispatcheType 指定过滤器的转发模式。具体取值包括:ASYNC、ERROR、FORWARD、INCLUDE、REQUEST
initParams WebInitParam[] 指定一组过滤器初始化参数,等价于< init-param>
asyncSupported boolean 声明过滤器是否支持异步操作模式,等价于< async-supported>标签
description String 该过滤器的描述信息,等价于< description>
displayName String 该过滤器的显示名,通常配合工具使用,等价于< display-name>

原因:
@Component
@component: 标注一个类为Spring容器的Bean,(把普通pojo实例化到spring容器中,相当于配置文件中的)

采坑记录
由于业务需要使用Filter。大体逻辑如下:
①通过WebFilter进行Filter声明,这样容器在进行部署的时候就会处理该Filter,创建实例并创建配置对象FilterConfig,然后会将该Filter应用到urlPatterns所指定的url;
②在init方法中获取到初始化参数,自定义的excludedUrls,作为成员在后续执行过滤逻辑的时候使用;
③在doFilter中进行url的鉴定,如果需要执行认证鉴权处理,则执行相应逻辑。不满足条件的情况下重定向到登录页;
④Filter类增加Component注解,让该Filter被容器管理。
问题就出在第一步和第四步。urlPatterns指定的URL不起作用,所有的请求都会经过过滤器,
然后在SpringBoot的Application中增加注解@ServletComponentScan,这样容器会扫描到@Component注解的Filter。
解决办法:
在这种情况下,去掉了@Component注解,再次启动服务。查看日志,发现该Filter仅被映射一次,通过浏览器访问相应的url也表现正确。

标签:String,路径,Component,Filter,urlPatterns,过滤器,WebFilter
From: https://www.cnblogs.com/wmrdbk/p/17442942.html

相关文章

  • 代码随想录算法训练营第17天 | ● 110.平衡二叉树 ● 257. 二叉树的所有路径 ● 404
     第六章二叉树part04 今日内容:  ●  110.平衡二叉树 ●  257. 二叉树的所有路径 ●  404.左叶子之和   详细布置  迭代法,大家可以直接过,二刷有精力的时候 再去掌握迭代法。  110.平衡二叉树 (优先掌握递归) 再一次涉及到,什么是高度,什么是......
  • hdu 1516(编辑距离+记录路径)
    最开始把问题搞错了,以为是两个串都可以做修改,无论我怎么想都不通。回到这个题目上,这道题和最长公共子序列很相似,思路可以说是一样的,包括记录路径。其实也就是根据递推数组的结果来判断。#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintma......
  • hdu 3635(并查集+路径压缩变形)
    解题思路:这道题想了我好久,因为我把城市的编号一起考虑进去了,结果想了好久都没A,最后看了别人的题解居然都没有考虑到城市的编号,不考虑城市编号的问题的话就是一个很水的并查集了。#include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;constintMAXN=1000......
  • 基于搜索的同构类约束路径规划算法-1
    摘要:目标导向的路径规划在移动机器人领域是基础且被广泛研究。由于障碍物的存在而产生的同一类轨迹,被定义为可以通过逐渐弯曲和拉伸而在不与障碍物碰撞的情况下相互转换的轨迹集合。在诸如预测动态实体的路径和计算具有动态约束的路径规划的启发式算之类的应用中,频繁出现寻找限制......
  • 基于搜索的同构类约束路径规划算法
    摘要:目标导向的路径规划在移动机器人领域是基础且被广泛研究。由于障碍物的存在而产生的同一类轨迹,被定义为可以通过逐渐弯曲和拉伸而在不与障碍物碰撞的情况下相互转换的轨迹集合。在诸如预测动态实体的路径和计算具有动态约束的路径规划的启发式算之类的应用中,频繁出现寻找限制......
  • 启动路径问题
    在部署Web应用程序时,可以通过更改路径来更改应用程序的URL,例如从http://localhost:8080/brand-demo更改为http://localhost:8080/myapp。要更改应用程序的路径,可以尝试以下几种方法:修改WAR文件名称:将WAR文件重命名为myapp.war,该文件名将成为应用程序的上下文路径,即应......
  • 发布-优化图片和js文件的存放路径
    把JavaScript文件同意生成到js目录中在webpack.config.js配置文件的output节点中,进行如下的配置:{test:/\.jpg|png|gif$/,use:'url-loader?limit=470&outputPath=images'}......
  • Web Component入门
    前言在我们现在的前端开发中,组件化早已成为主流。Vue、React、Angular等前端框架都贯彻着「组件化」的概念,而这一切「组件化」都是「高内聚、低耦合」思想下的产物。就当下而言,使用这些框架也会给我们带来一系列问题,例如:一个前端团队一半的项目用的Vue技术栈,一半的项目用的React......
  • 基于SA模拟退火优化的TWVRP路径规划matlab仿真
    1.算法仿真效果matlab2022a仿真结果如下:2.算法涉及理论知识概要模拟退火算法(simulatedannealing,SAA)来源于固体退火原理,是一种基于概率的算法。模拟退火算法来源于固体退火原理,是一种基于概率的算法,将固体加温至充分高,再让其徐徐冷却,加温时,固体内部粒子随温升变为无序状,内能增......
  • 动态规划 -- 路径问题
    #include<vector>#include<algorithm>#include<iostream>usingnamespacestd;//https://leetcode.cn/problems/dungeon-game/classSolution{public:intprocess1(intx,inty,introw,intcol,vector<vector<int>>&g......