Авторизуйте запрос в весенней безопасности, используя метод уровня безопасности - PullRequest
0 голосов
/ 21 февраля 2019

Я занимаюсь разработкой веб-приложений с использованием Spring и Hibernate.Требуется реализовать авторизацию на основе ролей с использованием безопасности на уровне метода.

Мое приложение разделено на две части -

  • API входа -Login API в основном предоставляет имя пользователя/ пароль аутентификации с использованием базы данных и будет генерировать токен.
  • Основной API - Этот API отвечает за все остальные функции.

Первый и последний (вход в систему/ logout) запрос от клиента будет обработан через login-api, а остальная часть запроса будет отправлена ​​в main-api.Для проверки подлинности запроса в main-api у меня есть перехватчик в main-api, который в конечном итоге вызовет метод login-api для проверки подлинности запроса.Таким образом, в main-api аутентификация выполняется через login-api, однако я хочу авторизовать каждый запрос в main-api на основе пользовательских ролей, определенных в базе данных.

Ниже приведен мой пример контроллера в main-api

@RestController
public class HealthController {

@PreAuthorize("hasRole('ADMIN')")
@RequestMapping(path = "/health", method = {RequestMethod.GET, RequestMethod.POST})
public ResponseEntity<String> getHealth() {
    System.out.println("HealthController");
    return new ResponseEntity<String>("Hello User!", HttpStatus.OK);
}
}

Я действительно не знаю, как определить пользовательские роли и авторизовать запрос на его основе.

Ниже приведен пример класса WebSecurityConfiguration, который я нашел в Google.Я вижу, что имя пользователя / пароль и роли жестко запрограммированы здесь.В моем случае у меня есть userId, и на основании этого я должен выбрать роли из базы данных и проверить авторизацию.

Я надеюсь, что то, что я просил, возможно.

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth.inMemoryAuthentication()
            .withUser("greg").password("turnquist").roles("ADMIN").and()
            .withUser("ollie").password("gierke").roles("USER", "ADMIN");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    .httpBasic().and()
    .authorizeRequests()
    .antMatchers("/health").hasRole("ADMIN")
    .antMatchers("/employees/**").hasRole("ADMIN")
    .antMatchers("/employees/**").hasRole("ADMIN").and()
    .csrf().disable();
}
}
...