只是想知道我是否以正确的方式解释answer to this question。
如果我们只需要保护这样一条路径:
http.antMatcher("/api/**").authorizeRequests()....
然后使用antMatcher()
。
如果我们需要保护多个这样的网址路径:
http
.authorizeRequests()
.antMatchers("/high_level_url_A/sub_level_1").hasRole('USER')
.antMatchers("/high_level_url_A/sub_level_2").hasRole('USER2')
...
然后使用antMatchers()
。
this question中有两个答案,但每个答案中提供的示例与另一个答案中的示例相矛盾。第一个答案说作者不需要antMatcher()
,第二个答案总是以'antMatcher()IIUC开头。
答案 0 :(得分:7)
HttpSecurity.antMatcher()将HttpSecurity个实例的默认请求匹配器从AntPathRequestMatcher更改为AnyRequestMatcher。 ExpressionUrlAuthorizationConfigurer.ExpressionInterceptUrlRegistry.antMatchers()用于将授权规则应用于与当前HttpSecurity实例关联的端点子集。
示例代码:
http
.antMatcher("/api/**")
.httpBasic()
.disable()
.authorizeRequests()
.antMatchers("/api/user/**", "/api/ticket/**", "/index")
.hasRole("ROLE_USER");
在上面的示例中,对与 / api / ** 匹配的所有端点禁用基本授权。此外,匹配 / api / user / ** 或 / api / ticket / ** 的端点将要求请求的身份验证包含ROLE_USER。但是,当用户尝试访问 / index 时,将会遇到基本的身份验证提示。输入凭据后,无论请求的身份验证是否包含ROLE_USER,都将授予用户对端点的访问权限。这是因为 .antMatcher(" / api / **")将整个HttpSecurity实例的范围限制为特定的AntMatcher。
以下示例将确保HttpSecurity的范围包括之前的三个AntMatchers,而不是其他任何内容:
http
.requestMatchers()
.antMatchers("/api/user/**", "/api/ticket/**", "/index")
.and()
.httpBasic()
.disable()
.authorizeRequests()
.any()
.hasRole("ROLE_USER");