如何区分具有路径变量的antMatchers与上下文路径的其余部分

时间:2019-04-14 11:54:33

标签: spring spring-security

我有两条路径:

/api/posts/{postId}
/api/posts/myPosts

我想允许第一个路径全部使用,并以USER角色保护第二个路径。

我尝试了以下模式,但是当我添加第一个模式时,第二个模式停止工作(即使用户没有USER角色,用户也可以获取 myPosts )。 我在做什么错了?

.antMatchers(HttpMethod.GET, "/api/posts/{postId}").permitAll()
.antMatchers(HttpMethod.GET, "/api/posts/myPosts").hasRole("USER")

2 个答案:

答案 0 :(得分:1)

问题出在您的规则顺序中。取消订单即可。

.antMatchers(HttpMethod.GET, "/api/posts/myPosts").hasRole("USER")
.antMatchers(HttpMethod.GET, "/api/posts/{postId}").permitAll()

答案 1 :(得分:-1)

这里的事情是,您必须指定所有路径都经过身份验证,因为它不是HttpSecurity对象的默认实现。

.antMatchers(HttpMethod.GET, "/api/posts/{postId}").permitAll()
.antMatchers(HttpMethod.GET, "/api/posts/myPosts").hasRole("USER")
.anyRequest().authenticated()

我建议在baeldung的家伙检查此link,他们向Spring Security简要介绍。