Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring MVC侦听器排除HTTP方法上的路径_Java_Spring_Spring Mvc - Fatal编程技术网

Java Spring MVC侦听器排除HTTP方法上的路径

Java Spring MVC侦听器排除HTTP方法上的路径,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一些拦截器需要检查对我的API执行的某些请求中的头和授权。例如,有些请求需要用户身份验证(例如,从数据库中更改用户详细信息),而有些请求不需要身份验证(例如,创建用户)。不幸的是,从拦截器中排除路径的方法并不依赖于请求方法 现在我已经创建了一个Util类,它接收应该从验证中排除的路径和方法字符串数组。例如:“POST/api/users”不应该被我的身份验证拦截器拦截,因为它是用于创建用户的,但是“PUT/api/users”应该被拦截,因为它是用于更改现有用户(应该登录的用户) 在我的拦截

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

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

在我的拦截器的构造函数中,我添加了应该被跳过的请求,在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过多,我想知道是否有更干净的方法来解决这个问题。

查看代码,我正在检查您是否能够扩展
拦截器注册
拦截器注册
,和
MappeInterceptor
。您还必须扩展
PathMatcher
,并合并代码来检查方法和路径,而
PathMatcher
并不适用于这些方法和路径。所以总的来说,你目前的做法可能是最好的。我还想指出,Spring的AntPathMatcher中的代码总是非常混乱和有bug,因此您可能不想承担任何涉及处理它的任务

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

}