用户能够访问管理员角色页面-Spring Security

时间:2019-04-25 22:07:21

标签: java spring spring-boot spring-security

我今天一直在使用Spring Security进行注册/登录,但仍然可以使用它。

我的配置是:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .authorizeRequests()
            .antMatchers("/**").permitAll()
            .antMatchers("/login").permitAll()
            .antMatchers("/registration").permitAll()
            .antMatchers("/viewGamers").permitAll()
            .antMatchers("/gameLibrary").permitAll()
            .antMatchers("/admin/**").hasAuthority("ADMIN").anyRequest()
            .authenticated().and().csrf().disable().formLogin()
            .loginPage("/login").failureUrl("/login?error=true")
            .defaultSuccessUrl("/gamer/home")
            .usernameParameter("email")
            .passwordParameter("password")
            .and().logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
            .logoutSuccessUrl("/").and().exceptionHandling()
            .accessDeniedPage("/access-denied");

}

据此我读到,如果您去/admin/anything,则必须分配一个ADMIN角色。正确吗?

我没有处理它的控制器中的逻辑检查,当通用的非管理员角色用户能够进入/admin/home页面时,我感到有些惊讶。

我在数据库中添加了一个新角色,请确保该用户具有与该角色相关联的角色,但它仍然可以访问管理页面,对吗?

我已经运行了一些printlns并可以确认角色正确。我在配置中犯了错误吗?还是需要 admin / home控制器中if (user.role != "Admin") { send elsewhere }的附加逻辑?

谢谢。

1 个答案:

答案 0 :(得分:2)

问题出在您的配置中,您应该从受限制较大的安全性开始,到受限制较少的安全性配置。  因此将顺序更改为:

            .antMatchers("/login").permitAll()
            .antMatchers("/registration").permitAll()
            .antMatchers("/viewGamers").permitAll()
            .antMatchers("/gameLibrary").permitAll()
            .antMatchers("/admin/**").hasAuthority("ADMIN")
            .antMatchers("/**").permitAll() // this will allow everything that passes all above cnofigs 

通知我删除了.anyRequest().authenticated(),因为其中包含.antMatchers("/**").permitAll(),如果您希望对所有请求进行身份验证,则可以将其替换。