-1

我试图忽略 SpringBoot 中 WebSecurity 的 url。能够为精确的网址匹配做到这一点。但是如果 url 本身有一个参数,它就不能忽略它。有没有更好的方法来忽略 url,比如忽略特定的控制器。如果没有,如何使用参数?

@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
}
4

6 回答 6

2

如果您在当前的 antMatcher 规范之后附加一个星号 (*),您应该可以实现您的目标。

根据定义:

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

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

您的代码的重要片段可能如下所示:

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

您也可以使用其他重载配置方法和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);
}
于 2019-03-16T03:48:23.780 回答
1

尝试使用通配符。

web.ignoring().antMatchers("/api/v1/something/**");
于 2019-03-11T19:26:44.147 回答
1

尝试使用HttpSecurity

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
            .antMatchers("/api/v1/something/**").permitAll();
}
于 2019-03-15T06:49:17.540 回答
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 示例

于 2019-03-15T06:57:18.670 回答
1

您可以使用regexmatchers相同的。

public void configure(WebSecurity web) throws Exception {
      web.ignoring().regexMatchers("/api/v1/something.*");
}
于 2019-03-15T09:37:12.983 回答
1

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

于 2019-03-18T09:18:54.473 回答