Spring MVC Spring,Interceptor的excludePathPatterns函数无法正常工作

4ioopgfo  于 6个月前  发布在  Spring
关注(0)|答案(6)|浏览(78)

我在Spring Framework上工作,我想写一个拦截器,我最终写了它,它工作得很好。但在一个点上,我不希望我的拦截器拦截请求,这是当用户想要注销和会话被无效。但它并没有按照我的期望发生。
我通过扩展WebMvcConfigurerAdapter并使用addInterceptors方法添加拦截器,代码如下。

public void addInterceptors(InterceptorRegistry registry) {
    super.addInterceptors(registry);
    registry.addInterceptor( loggerInterceptor );
    registry.addInterceptor( authenticationInterceptor ).excludePathPatterns("/invalidate");   
    }

字符串
我在这里做错了什么吗?excludePathPatterns - >我的URL以/invalidate结尾。所以请指导我,如何设计一个正确的模式。

7z5jn7bk

7z5jn7bk1#

你试过下面吗?

@Configuration
@EnableWebMvc
public class MyWebConfig extends WebMvcConfigurerAdapter 
{
  @Override
  public void addInterceptors(InterceptorRegistry registry) 
  {
    registry.addInterceptor(new MyCustomInterceptor())
            .addPathPatterns("/**")
            .excludePathPatterns("/foo/**");
  }
}

字符串
Reference
请参阅此java文档以更好地理解。

bwitn5fc

bwitn5fc2#

我想可能是你的代码触发了另一个错误,url路径更改为另一个url(/error等),然后/error url路径,你没有排除,请检查你的代码或调试断点为this picture.

jk9hmnmh

jk9hmnmh3#

不需要添加:

addPathPatterns("/**")

字符串
MappedInterceptor.java:


的数据

flvlnr44

flvlnr444#

在我的例子中,我必须调试Spring的整个FrameworkServlet,在某个地方,抛出一个异常说:“没有名为hashId的参数”。
结果我的requestParam没有被命名为hashId,而是id,所以拦截器被正确地应用到服务URL路径。
确保excludedPattern以“/”开头,并使用控制器中定义的参数名称进行请求。

bgibtngc

bgibtngc5#

我在实现类似的需求时发现了同样的问题。如果你使用的是Spring 5+**版本,请在下面的代码中尝试。

@Configuration
public class BasicInterceptorAppConfig implements **WebMvcConfigurer** {

    @Autowired
    YourCustomInterceptor yourCustomInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry interceptorRegistry){
        interceptorRegistry.addInterceptor(yourCustomInterceptor).addPathPatterns("/**").excludePathPatterns("/admin.html", "/swagger-ui.html");

    }

}

字符串
请使用Spring 5+版本的WebMvcConfigurer。希望这可以帮助正在寻找类似解决方案的人。

wxclj1h5

wxclj1h56#

在我的例子中,它缺少尾随斜杠。
第一个月
而不是
registry.addInterceptor(fooInterceptor()).excludePathPatterns("/internal/bar/**");

相关问题