如果SpringBoot Websecurity具有参数,则它不会忽略该URL

时间:2019-03-11 18:48:02

标签: spring spring-boot websecurity

我试图在SpringBoot中忽略WebSecurity中的URL。能够做到精确匹配网址。但是,如果url本身存在参数,则无法忽略它。是否有更好的方法来忽略url,例如忽略特定的控制器。如果没有,该如何处理params?

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/v1/something");
    // was able to ignore [url]/api/v1/something but not [url]/api/v1/something?xyz=wjsbjbjbsjbw
}

6 个答案:

答案 0 :(得分:1)

尝试使用通配符。

web.ignoring().antMatchers("/api/v1/something/**");

答案 1 :(得分:1)

使用HttpSecurity

尝试一下
@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/api/v1/something/**").permitAll();
}

答案 2 :(得分:1)

这应该为您工作。

[url]/api/v1/something?xyz=wjsbjbjbsjbw

替换如下 “ wjsbjbjbsjbw” = *

因此,新网址为

[url]/api/v1/something?xyz=*

/之后的每个值都可以视为*

我不确定something是什么,您也可以将其设为*

或者其他肯定可行的方法是

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("[url]/api/v1");
}

有关更多详细信息,请参见Spring Security Samples

答案 3 :(得分:1)

您可以使用regexmatchers

public void configure(WebSecurity web) throws Exception {
      web.ignoring().regexMatchers("/api/v1/something.*");
}

答案 4 :(得分:1)

如果您在当前的antMatcher规范后面加上星号(*),则应该实现自己的目标。

Per definition:

  

映射使用以下规则匹配URL:

     
      
  • ?匹配一个字符
  •   
  • *匹配零个或多个字符
  •   
  • **匹配路径中的零个或多个目录
  •   
  • {spring:[a-z] +}与正则表达式[a-z] +匹配,并将其作为名为“ spring”的路径变量
  •   

您的代码的重要代码段可能看起来像这样:

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers("/api/v1/something*");
}

对于与路径相关的安全性配置,您还可以使用其他重载的configure方法(参数类型为HttpSecurity)来实现相同的目的,如下所示:

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/api/v1/something*").permitAll();
}

如定义中所述,在以/**结束AntMatcher时,您还可以更进一步,并允许路径下方的任何内容。但这实际上取决于您的用例。 有关实现的详细信息,请查看Spring AntPathRequestMatcher


您的相应请求映射应如下所示(带有@GetMapping的示例)。重要的是,您的路径必须没有尾随/

@GetMapping("/api/v1/something")
public ResponseEntity<String> getSomething(@RequestParam(value = "xyz", required = false) String xyz){
    return ResponseEntity.ok("Called with xyz param: " + xyz);
}

答案 5 :(得分:0)

web.ignoring().antMatchers("/api/v1/something/**");应该可以正常工作,但是请检查您是否包含web.ignoring().antMatchers("/error/**");,因为我之前遇到过类似的问题,错误端点也得到了身份验证。希望这会有所帮助。