如何在Spring中使用角色?

时间:2018-11-08 18:58:22

标签: java spring authorization roles

在我的应用程序中,我具有以下角色: 访客,用户,所有者和管理员

我想使用某种授权,其中Admin可以使用所有端点,而Owner可以使用用户具有的所有功能。我应该如何实现呢?什么是好习惯?

3 个答案:

答案 0 :(得分:3)

如果您已经设置了securityConfig文件,那么所有要做的就是允许不同用户角色访问不同的页面,您可以在SecurityConfig类中进行以下操作:

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

    http.authorizeRequests()
        .antMatchers("/homePage").access("hasRole('ROLE_USER') or hasRole('ROLE_ADMIN')")
        .antMatchers("/userPage").access("hasRole('ROLE_USER')")
        .antMatchers("/adminPage").access("hasRole('ROLE_ADMIN')")
        .and()
            .formLogin().loginPage("/loginPage")
            .defaultSuccessUrl("/homePage")
            .failureUrl("/loginPage?error")
            .usernameParameter("username").passwordParameter("password")                
        .and()
            .logout().logoutSuccessUrl("/loginPage?logout"); 

}
}

如您所见,具有ROLE_ADMIN角色或普通用户(USER_ROLE)角色的任何用户都可以访问主页... 如果看到adminPage只能由具有ROLE_ADMIN角色的用户访问...

答案 1 :(得分:1)

您可以使用方法安全性。首先,您需要启用方法安全性,您可以执行以下操作:

@Configuration
@EnableResourceServer
@EnableGlobalMethodSecurity(prePostEnabled = true) //THIS IS THE KEY
public class SecurityConfig extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
    }
}

启用后,您可以按方法和用户轻松使用安全性,如下所示:

@GetMapping("/ativas")
@PreAuthorize("hasAnyAuthority('ROLE_ADMIN', 'ROLE_USER') and #oauth2.hasScope('read')")
public List<YourObject> findAll(){
    return service.findAll();
}

这是一个简短的答案。

答案 2 :(得分:1)

首先将Spring Security依赖项添加到pom.xml中。现在,使用一个类通过扩展webSecurityConfigurerAdapter来配置Spring安全性。确保添加@Configuration和@EnableWebSecurity批注。看下面的代码。这应该有所帮助。

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    auth.inMemoryAuthentication().withUser(id).password("{noop}" + pwd).roles("USER").and().withUser(admin_id).password("{noop}" + admin_pwd).roles("ADMIN", "USER");
}


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

    http.
    csrf().disable().authorizeRequests().antMatchers("/**").hasRole("ADMIN").
            and().httpBasic();

}