Рубрики
Без рубрики

Введение в Java Config для весенней безопасности

Быстрое и практичное руководство по Java Config для весенней безопасности.

Автор оригинала: baeldung.

1. Обзор

Эта статья является введение в конфигурацию Java для системы весенней что позволяет пользователям легко настроить Spring Security без использования XML- .

Конфигурация Java была добавлена в структуру Spring в Весна 3.1 и распространяется на весеннюю безопасность в Весна 3,2 и определяется в классе, аннотированном @Configuration .

2. Мавен Настройка

Чтобы использовать Spring Security в проектах Maven, мы сначала должны иметь весна-безопасность основных зависимость в проекте пом.xml :


    org.springframework.security
    spring-security-core
    5.3.3.RELEASE

Последнюю версию всегда можно найти здесь .

3. Веб-безопасность с конфигурацией Java

Начнем с основного примера конфигурации Spring Security Java:

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) 
      throws Exception {
        auth.inMemoryAuthentication().withUser("user")
          .password(passwordEncoder().encode("password")).roles("USER");
    }
}

Как вы могли заметить, конфигурация настраивает основную конфигурацию подлинности памяти. Кроме того, начиная с весны 5, нам нужен фасоль PasswordEncoder:

@Bean
public PasswordEncoder passwordEncoder() {
    return new BCryptPasswordEncoder();
}

4. HTTP безопасности

Для обеспечения безопасности HTTP весной нам необходимо расширить WebSecurityКонфигурерАдаптер для обеспечения конфигурации по умолчанию в настроить (HttpSecurity http) метод:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().httpBasic();
}

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

Кроме того, он точно похож на следующую конфигурацию XML:


    
    
    

5. Форма входа

Интересно, что Spring Security автоматически генерирует страницу входа, основываясь на функциях, которые включены, и используя стандартные значения для URL-адреса, который обрабатывает представленный логин:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .anyRequest().authenticated()
      .and().formLogin()
      .loginPage("/login").permitAll();
}

Здесь автоматически генерируемая страница входа удобна для быстрого запуска.

6. Авторизация с ролями

Теперь настройте несколько простых авторизаций на каждом URL с использованием ролей:

protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
      .antMatchers("/", "/home").access("hasRole('USER')")
      .antMatchers("/admin/**").hasRole("ADMIN")
      .and()
      // some more method calls
      .formLogin();
}

Обратите внимание, как мы используем как тип-безопасный API – имеетРоле – но и API на основе выражения, через доступ.

7. Логут

Как и многие другие аспекты Весенней безопасности, logout имеет некоторые большие по умолчанию, предоставляемые структурой.

По умолчанию запрос logout аннулирует сеанс, очищает любые кэши аутентификации, очищает SecurityContextHolder и перенаправляет на страницу входа.

Вот простой logout config:

protected void configure(HttpSecurity http) throws Exception {
    http.logout();
}

Однако, если вы хотите получить больше контроля над доступными обработчиками, вот как будет выглядеть более полная реализация:

protected void configure(HttpSecurity http) throws Exception {
    http.logout().logoutUrl("/my/logout")
      .logoutSuccessUrl("/my/index")
      .logoutSuccessHandler(logoutSuccessHandler) 
      .invalidateHttpSession(true)
      .addLogoutHandler(logoutHandler)
      .deleteCookies(cookieNamesToClear)
      .and()
      // some other method calls
}

8. Аутентификация

Давайте посмотрим на другой способ обеспечения аутентификации с Spring Security.

8.1. Проверка подлинности памяти

Начнем с простой конфигурации в памяти:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) 
  throws Exception {
    auth.inMemoryAuthentication()
      .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
      .and()
      .withUser("admin").password(passwordEncoder().encode("password")).roles("USER", "ADMIN");
}

8.2. Проверка подлинности JDBC

Чтобы переместить это в JDBC, все, что вам нужно сделать, это определить источник данных в приложении – и использовать это непосредственно:

@Autowired
private DataSource dataSource;

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) 
  throws Exception {
    auth.jdbcAuthentication().dataSource(dataSource)
      .withDefaultSchema()
      .withUser("user").password(passwordEncoder().encode("password")).roles("USER")
      .and()
      .withUser("admin").password(passwordEncoder().encode("password")).roles("USER", "ADMIN");
}

Конечно, с обоими вышеуказанными примерами, мы также должны определить ПарольЭнкодер фасоли, как указано в разделе 3.

9. Заключение

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