Как я могу использовать роли в Spring? - PullRequest
0 голосов
/ 08 ноября 2018

В моем приложении у меня есть следующие роли: Гость, пользователь, владелец и администратор

Я хотел бы использовать некоторую авторизацию, при которой администратор может использовать все конечные точки, а владелец может использовать все функции, которые есть у пользователя. Как мне этого добиться? Какие хорошие практики?

Ответы [ 3 ]

0 голосов
/ 08 ноября 2018

Если у вас есть файл настроек 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 ...

0 голосов
/ 08 ноября 2018

Сначала добавьте зависимость Spring Security в ваш pom.xml. Теперь используйте класс для настройки безопасности Spring, расширяя webSecurityConfigurerAdapter. Убедитесь, что вы добавили аннотации @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();

}
0 голосов
/ 08 ноября 2018

Вы можете использовать методы безопасности. Прежде всего, вам нужно включить метод безопасности, вы можете сделать это:

@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();
}

Это короткий ответ.

...