java - @WebFilter 在使用 MockMvc 测试控制器时不起作用
问题描述
我在 MockMvc 中添加了一些过滤器以进行 junit 测试。其中一个过滤器有一个 @WebFilter 注释。它旨在拦截像“/third/*”这样的URL。但是,当我尝试访问与上述模式不匹配的 URL 时,@WebFilter 注释不起作用。
第三应用过滤器
@Component
@Order(value = 4)
@ServletComponentScan(basePackages = {"com.oppo.it.teambition.filter"})
@WebFilter(urlPatterns = { "/third/*" }, filterName = "thirdAppFilter")
@ConfigurationProperties(prefix = "whitelist")
@EnableConfigurationProperties
public class ThirdAppFilter implements Filter {
@Autowired
private UserService userService;
@Autowired
private ConfigCenter configCenter;
private Map<String, List<String>> ip;
@Value("${teambition.admin}")
private String adminAccount;
public void setIp(Map<String, List<String>> ip) {
this.ip = ip;
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String requestAddress = request.getHeader("x-forwarded-host");
// 仅接受来自白名单ip的请求
// 来自网关的请求
List<String> gateways = configCenter.getWhitelistIpGateway() != null ? configCenter.getWhitelistIpGateway() : ip.get("gateway");
if (!gateways.contains(requestAddress)) {
response.sendError(HttpStatus.FORBIDDEN.value(), "访问者受限");
return;
}
String appTag = request.getHeader("userId");
String adminToken = userService.getUserToken(adminAccount, "@oppo.com");
request.setAttribute("appTag", appTag);
request.setAttribute("accessToken", adminToken);
request.setAttribute("adminToken", adminToken);
chain.doFilter(servletRequest, servletResponse);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
模拟Mvc
@Before
public void setUp() throws Exception {
mvc = MockMvcBuilders.webAppContextSetup(wac)
.addFilter(advanceFilter)
.addFilter(thirdAppFilter)
.addFilter(idempotenceFilter)
.addFilter(webhookFilter)
.build();
}
解决方案
推荐阅读
- python - 通过截面检测分析传感器数据
- r - R中列的条件计算
- python - IndexError:Tkinter 回调中的列表索引超出范围异常
- flutter - 未处理的异常:键入“列表”
' 不是类型 'Map 的子类型 ' --Flutter - 实时数据库 - - ios - 更改 iOS 上的状态栏颜色
- node.js - 回调中的 Socket.Io 回调可能
- java - 如何通过位移将使用 Android 的 AudioRecord 创建的 16 位音频转换为 12 位音频?
- azure-devops - 为什么我的 Azure DevOps 迁移会在几个小时后超时?
- .net - 如何将配置文件添加到 .NET Core 控制台应用程序?
- python - 如何在给定矩阵中查找所有子矩阵值大于阈值(不使用 numpy 和 Scipy)