我试图在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
}
答案 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规范后面加上星号(*),则应该实现自己的目标。
映射使用以下规则匹配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/**");
,因为我之前遇到过类似的问题,错误端点也得到了身份验证。希望这会有所帮助。