java 拦截器 排除_java – Spring MVC Interceptor排除HTTP方法的路径

本文探讨了在Java Spring框架中实现API请求拦截器时如何有效地排除特定路径和方法的问题。作者提出了一种利用Util类进行路径和方法匹配的方法,并讨论了其局限性和可能的改进方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有一些拦截器需要在我的API的一些请求中检查标头和授权.例如,某些请求应该要求用户身份验证(例如,从数据库更改用户详细信息),有些请求不需要身份验证(例如,创建用户).不幸的是,从拦截器中排除路径的方法不依赖于请求方法.

现在我创建了一个Util类,它接收应该从验证中排除的路径和方法字符串数组.例如:“POST / api / users”不应该被我的身份验证拦截器截获,因为它是用于创建用户,但是应该拦截“PUT / api / users”,因为它用于更改现有用户(应该记录谁)在).

public static Boolean skipVerification(HttpServletRequest request, String... skipRequests) {

for (String string : skipRequests) {

String[] split = string.split(" ");

if(split[0].equals(request.getMethod()) && split[1].equals(request.getRequestURI()))

return true;

}

return false;

}

在我的拦截器的构造函数中,我添加了应该跳过的请求,并且在PreHandle方法中,如果请求与其中任何一个匹配,则返回true,因为它们首先不需要我截获.

public AuthenticationHeaderInterceptor(String...skipWhen) {

this.skipWhen = skipWhen;

}

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)

throws Exception {

if(InterceptorUtils.skipVerification(request, skipWhen))

return true;

///Do Authentication Logic

}

我知道更改用于创建和编辑用户的URI可以解决这个问题,但我不希望使用过多的URI来混乱我的API,并且想知道是否有更简洁的方法来解决这个问题.

解决方法:

看一下代码,我正在检查你是否能够扩展InterceptorRegistry,InterceptorRegistration和MappedInterceptor.您还必须扩展PathMatcher并合并代码以检查方法以及PathMatcher不适用的路径.总的来说,你目前的做法可能是最好的.我还要指出Spring的AntPathMatcher中的代码一直非常混乱和错误,所以你可能不想承担任何涉及处理它的任务.

标签:java,spring-mvc,spring

来源: https://codeday.me/bug/20190706/1396175.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值