gpt4 book ai didi

java - Spring MVC 拦截器排除 HTTP 方法上的路径

转载 作者:搜寻专家 更新时间:2023-11-01 03:34:19 25 4
gpt4 key购买 nike

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

现在我已经创建了一个 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 可以解决这个问题,但我不想让我的 API 包含太多 URI,并且想知道是否有更简洁的方法来解决这个问题。

最佳答案

查看代码,我正在检查您是否能够扩展 InterceptorRegistryInterceptorRegistrationMappedInterceptor。您还必须扩展 PathMatcher 并合并代码以检查方法和路径,这不是 PathMatcher 的目的。所以总的来说,你目前做这件事的方式可能是最好的。我还要指出 Spring 的 AntPathMatcher 中的代码一直非常困惑和错误,因此您可能不想承担涉及处理它的任何任务。

关于java - Spring MVC 拦截器排除 HTTP 方法上的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36092529/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com