首页 > 解决方案 > 仅允许对 Spring Security 中的特定角色访问 url 模式

问题描述

我试图只允许具有“管理员”角色的用户访问以下端点:

../adminconfig/*(那些在 url 中有 'adminconfig' 的)

这是我的配置:

@SpringBootApplication
@EnableWebSecurity
@RestController
public class BootApplication extends WebSecurityConfigurerAdapter {


    public static void main(String[] args) {
        SpringApplication.run(BootApplication.class, args);
    }

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
                .inMemoryAuthentication()
                .withUser("user").password("{noop}1").roles("USER").and()
                .withUser("admin").password("{noop}1").roles("ADMIN");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception{

        http
                .authorizeRequests()

                .anyRequest().authenticated()
                .antMatchers("/adminconfig/**").hasRole("ADMIN")
                .and()
                .formLogin().and()
                .httpBasic();
    }

}

但我仍然可以使用任何其他用户访问它们,例如使用“用户”角色。我究竟做错了什么?

标签: springspring-security

解决方案


找到了解决方案。我不得不将 antMatchers().. 移到 .anyRequest().authenticated() 上方:

            .antMatchers("/adminconfig/**").hasRole("ADMIN")
            .anyRequest().authenticated()

推荐阅读