在我的应用程序中,我具有以下角色: 访客,用户,所有者和管理员
我想使用某种授权,其中Admin可以使用所有端点,而Owner可以使用用户具有的所有功能。我应该如何实现呢?什么是好习惯?
答案 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();
}