Spring Boot Security:未携带角色能否访问无需admin角色的端点?
问题解答
未携带任何角色的请求能否访问这些无需admin角色的端点,完全取决于你对这些端点的Spring Security权限配置,分以下几种常见情况:
情况1:非admin端点配置了
permitAll()
如果你对非admin端点设置了允许所有请求访问(包括匿名请求),比如这样配置:@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().permitAll(); // 其余端点无限制 } }这种情况下,未携带任何角色的请求(甚至未登录的匿名请求)都可以正常访问这些端点。
情况2:非admin端点仅要求
authenticated()
如果你配置了所有请求都需要认证,但非admin端点不限制具体角色,比如:@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .anyRequest().authenticated(); // 仅要求已登录,不限制角色 } }这种情况下,已登录但没有任何角色的用户可以访问这些端点,但未登录的匿名请求会被拦截(通常返回401或跳转到登录页)。
情况3:非admin端点指定了需要client角色
如果你明确配置了非admin端点需要CLIENT角色,比如:@Configuration public class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests() .antMatchers("/admin/**").hasRole("ADMIN") .antMatchers("/client/**").hasRole("CLIENT") // 指定需要CLIENT角色 .anyRequest().permitAll(); } }这种情况下,未携带角色的请求无法访问这些端点,只有拥有CLIENT角色的用户才能访问。
简单来说:你给非admin端点加的权限规则,直接决定了无角色请求是否能访问。
内容的提问来源于stack exchange,提问作者soudiogo
相关产品推荐
相关产品推荐

