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

springboot中server.main.web-application-type=reactive导致的拦截器不生效

1、问题

今天写了在springboot项目中写了一个拦截器但是不生效,代码中拦截器implements HandlerInterceptor,同时implements WebMvcConfigurer中将该拦截器添加进去了,但是打断点进不去,也就意味着代码没有生效

@Data
@Component
@ConfigurationProperties(prefix = "myapp")
public class WhiteIpProperties {private List<String> allowedIps;
}

IpAddressInterceptor

/*** 定义拦截器以及执行时候的业务代码*/
@Slf4j
@Component
public class IpAddressInterceptor implements HandlerInterceptor {@Autowiredprivate WhiteIpProperties whiteIpProperties;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String ipAddress = request.getRemoteAddr();List<String> allowedIps = whiteIpProperties.getAllowedIps();if (allowedIps.contains(ipAddress)) {return true;} else {log.info("该ip不在访问的白名单中:{}", ipAddress);response.sendError(HttpServletResponse.SC_FORBIDDEN);return false;}}
}

WebMvcConfig

/*** 用于注册拦截器*/
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {@Autowiredprivate IpAddressInterceptor ipAddressInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(ipAddressInterceptor).addPathPatterns("/api/video/**", "/api/img/**").excludePathPatterns("/error");}
}

2、定位原因

spring:main:web-application-type: reactive

在这里插入图片描述

问了下ai
在这里插入图片描述
那就按照ai提示的重新写代码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3、修改后正确代码

将上面的WebMvcConfig、WebMvcConfig删除掉重写,
下面是修改后的正确的代码,因为我是只有一个就直接这样写了,后面有扩展多个的情况

import com.cao.config.WhiteIpProperties;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import reactor.core.publisher.Mono;import java.util.List;@Slf4j
@Component
public class IpAddressFilter implements WebFilter {@Autowiredprivate WhiteIpProperties whiteIpProperties;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {String reqestIp = exchange.getRequest().getRemoteAddress().getHostName();List<String> allowedIps = whiteIpProperties.getAllowedIps();// 判断请求ip是否在白名单中if (allowedIps.contains(reqestIp)) {// 允许访问return chain.filter(exchange);} else {// 拒绝访问log.info("该ip不在访问的白名单中:{}", reqestIp);exchange.getResponse().setStatusCode(HttpStatus.FORBIDDEN);return exchange.getResponse().writeWith(Mono.just(exchange.getResponse().bufferFactory().wrap("该ip不在访问的白名单中".getBytes())));}}
}

调用后打断点进去入代码中,所以代码是生效的,同时要实现的拦截器的功能也测试是OK了。

4、扩展

因为我是只需要一个,如果有多个的话,就按照这个格式写
方式1:
在这里插入图片描述

方式2:
在这里插入图片描述

http://www.dtcms.com/a/495941.html

相关文章:

  • 1688黄页网免费网站做外贸服饰哪个个网站好
  • 杭州做企业网站公司网络营销策略应遵循的原则
  • 对“机器人VCU”进行一个详细、系统的讲解。
  • 陕西省城乡住房和建设厅网站网站建设shzanen
  • 49.字母异位词分组
  • 移动网站登录入口wordpress孕婴模板
  • 网站开发的四个高级阶段包括天津网站优化流程
  • 3.6 第一个JSON Schema(一)
  • 指针终极理解
  • 门头沟区专业网站制作网站建设wordpress登录框插件
  • 没网站做推广wordpress建站 域名
  • 企业客户管理优化方案:构建高效客户关系体系
  • 【隐语SecretFlow用户案例】亚信科技构建统一隐私计算框架探索实践
  • Win11系统安装TranslucentTB报错解决
  • 国外唯美flash个人网站欣赏资阳房产网站建设
  • 营销型企业网站怎么建站虚拟商品自动发货网站搭建教程
  • 网站文件命名规则网站做电源
  • ProE/Creo模型高效转换3DXML技术方案:在线转换工具全解析
  • 投资网站策划wordpress配置七牛
  • 吉林电商网站建设公司哪家好旅游网页制作教程
  • C#实现SQL Server→Snowflake建表语句转换工具
  • 一种面向 AIoT 定制化场景的服务架构设计方案
  • 免费做网站刮刮卡舆情查询
  • 深圳建设厅网站官网免费虚拟主机官网
  • 塑胶制造生产ERP:有哪些系统值得关注
  • 怎么学习做网站vue is做的购物网站
  • 广州白云手机网站建设佛山专业做网站公司有哪些
  • 自己可以做一个网站吗如何删除网站后台的文章
  • PostgreSQL学习之postgis编译
  • unitree rl gym项目实践记录1:部署unitree rl gym项目