dav*_*map 5 java spring spring-mvc
我有一些拦截器需要检查对我的 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;
}
Run Code Online (Sandbox Code Playgroud)
在我的拦截器的构造函数中,我添加了应该被跳过的请求,并且在 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
}
Run Code Online (Sandbox Code Playgroud)
我知道更改用于创建和编辑用户的 URI 可以解决这个问题,但我不想让我的 API 有太多的 URI,并且想知道是否有更简洁的方法来解决这个问题。
查看代码,我正在检查您是否能够扩展InterceptorRegistry、InterceptorRegistration和MappedInterceptor。您还必须扩展PathMatcher和合并代码来检查方法和路径,但这PathMatcher是不适合的。总的来说,您目前的做法可能是最好的。我还要指出 Spring 中的代码AntPathMatcher一直非常混乱且有缺陷,因此您可能不想承担任何涉及处理它的任务。
| 归档时间: |
|
| 查看次数: |
1389 次 |
| 最近记录: |