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

Posted

技术标签:

【中文标题】用户能够访问管理员角色页面 - Spring Security [重复]【英文标题】:User able to access Admin role page - Spring Security [duplicate] 【发布时间】:2019-09-15 09:58:23 【问题描述】:

我今天一直在使用 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】:

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

            .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(),如果您希望对所有请求进行身份验证,可以替换它。

【讨论】:

以上是关于用户能够访问管理员角色页面 - Spring Security [重复]的主要内容,如果未能解决你的问题,请参考以下文章

Grails Spring Security UI、用户和​​角色管理访问

用户通过启用角色的安全组分配的 Exchange 管理员角色无法访问 EAC,但能够使用管理外壳

拒绝Spring Security中具有相同角色的多个用户的访问

(Spring security) 页面无权访问管理权限中的 css 样式、插件等

Symfony 3 - 我在管理角色方面遇到了一些困难

如何使用spring security进行用户角色管理?