匹配任何路径开头的antMatchers

时间:2017-04-30 08:20:25

标签: spring spring-boot spring-security

我已经获得了用于身份验证的REST服务。身份验证端点看起来像/api/v.1/authentication。 API版本是一个变量,可以更改以反映更新的版本。一个例子是/api/v.2/authentication。我希望有antMatcher可以处理这两种情况,所以我尝试.antMatchers(HttpMethod.POST,"**/authenticate").permitAll()使用**匹配端点的任何开头,但这不起作用。完整设置如下。

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
        .csrf().disable()
        .authorizeRequests()
             .antMatchers(HttpMethod.POST, "**/authenticate").permitAll()
             .antMatchers(HttpMethod.GET, "**/get-public-key").permitAll()
             .and()
        .authorizeRequests()
             .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
             .anyRequest().authenticated();
}

我有什么建议可以解决这个问题吗?

1 个答案:

答案 0 :(得分:6)

您必须使用绝对模式,请参阅AntPathMatcher

  

注意:模式和路径必须都是绝对的,或者必须都是相对的才能使两者匹配。因此,建议此实现的用户清理模式,以便为它们添加" /"因为它在他们使用的环境中是有意义的。

您修改和简化的配置:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
        .sessionManagement()
            .sessionCreationPolicy(SessionCreationPolicy.STATELESS)
            .and()
        .csrf().disable()
        .authorizeRequests()
            .antMatchers(HttpMethod.POST, "/**/authenticate").permitAll()
            .antMatchers(HttpMethod.GET, "/**/get-public-key").permitAll()
            .antMatchers(HttpMethod.OPTIONS, "/**").permitAll()
            .anyRequest().authenticated();
}