Spring Security для борьбы с галантерейными товарами: запись класса пользовательской конфигурации WebSecurityConfigurerAdapter

Spring Boot

1. Введение

Сегодня мы собираемся узнать, как настроить конфигурациюSpring SecurityМы упоминали об этом много разWebSecurityConfigurerAdapter, и мы знаем, чтоSpring BootАвтоконфигурация фактически находится в пакете автоконфигурацииSecurityAutoConfigurationИмпортировано в класс общей конфигурацииSpring Boot WebКласс конфигурации безопасностиSpringBootWebSecurityConfigurationнастроить. Так что возьмем на работу. Если вы все еще запутались, рекомендуется проверить через https://felord.cnSpring Безопасность в действии.

2. Настройте класс конфигурации веб-безопасности Spring Boot.

Мы используем то, что умеем лучше всегоCtrl + C,Ctrl + Vскопируйте исходный кодSpringBootWebSecurityConfiguration, назвали наш обычайCustomSpringBootWebSecurityConfiguration :

   @Configuration
   @ConditionalOnClass(WebSecurityConfigurerAdapter.class)
   @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
   public class CustomSpringBootWebSecurityConfiguration {
   
       @Configuration
       @Order(SecurityProperties.BASIC_AUTH_ORDER)
       static class DefaultConfigurerAdapter extends WebSecurityConfigurerAdapter {
           @Override
           protected void configure(AuthenticationManagerBuilder auth) throws Exception {
               super.configure(auth);
           }
   
           @Override
           public void configure(WebSecurity web) throws Exception {
               super.configure(web);
           }
   
           @Override
           protected void configure(HttpSecurity http) throws Exception {
               super.configure(http);
           }
       }
   }

Я думаю, что кто-то заметил вышеDefaultConfigurerAdapterя перезаписываю(@Override) три метода, мы обычно настраиваем нашу политику безопасного доступа путем индивидуальной настройки этих трех методов.

2.1 Метод настройки диспетчера аутентификации

void configure(AuthenticationManagerBuilder auth)Используется для настройки менеджера аутентификацииAuthenticationManager. Короче, это всеUserDetailsсвязанные со всем этим, в том числеPasswordEncoderШифровальная машина. Если вы не уверены, вы можете пройтиДетали пользователя в Spring Securityпонять. Эта статья оAuthenticationManagerЯ не буду делать конкретный анализ и объяснение, и об этом будет отдельная статья позже. доступныйБоевая серия Spring Securityучиться.

2.2 Метод настройки основного фильтра

void configure(WebSecurity web)используется для настройкиWebSecurity. иWebSecurityоснован наServlet Filterиспользуется для настройкиspringSecurityFilterChain. иspringSecurityFilterChainбыл снова доверенОсновные фильтрующие компоненты Spring Security DelegatingFilterProxy. Соответствующую логику можно найти вWebSecurityConfigurationнайти в. Обычно мы не настраиваем слишком многоWebSecurity, используйте больше, чтобы сделать этоignoring()метод игнорироватьSpring SecurityКонтроль над статическими ресурсами.

2.3 Метод настройки цепочки фильтров безопасности

void configure(HttpSecurity http)Это то, что мы используем больше всего для настройкиHttpSecurity.HttpSecurityИспользуется для построения цепочки фильтров безопасностиSecurityFilterChain.SecurityFilterChainнаконец ввелисердечник фильтр.HttpSecurityНам нужно много конфигураций. Мы можем использовать его для настройки политики безопасного доступа. Так что у нас есть отдельная глава, чтобы объяснить этот материал.

3. Конфигурация HttpSecurity

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

3.1 Конфигурация по умолчанию

      protected void configure(HttpSecurity http) throws Exception {
          logger.debug("Using default configure(HttpSecurity). If subclassed this will potentially override subclass configure(HttpSecurity).");
  
          http
              .authorizeRequests()
                  .anyRequest().authenticated()
                  .and()
              .formLogin().and()
              .httpBasic();
      }

вышеSpring SecurityсуществуетSpring BootКонфигурация по умолчанию в . Благодаря приведенной выше конфигурации ваше приложение имеет следующие функции:

  • Все запрошенные доступы требуют авторизации.
  • использоватьformформа для входа в систему (путь по умолчанию/login), это страница входа в систему, которую мы видели в предыдущих статьях.
  • не допуститьCSRFатака,XSSатака.
  • включитьHTTP BasicСертификация

3.2 Интерпретация общих методов

HttpSecurityиспользовалbuilderвстроенный гибкий способ формулирования политик доступа. сначала на основеXMLпара теговHttpSecurityнастроить. Большинство используют сейчасjavaConfigСпособ. Обычно используемые методы интерпретируются следующим образом:

метод инструкция
openidLogin() Для аутентификации на основе OpenId
headers()
Добавьте заголовки безопасности к ответам, скажем, простую защиту от XSS.
cors() Настройка общего доступа к ресурсам между источниками (CORS)
sessionManagement() Позволяет настроить управление сеансом
portMapper() Позволяет настроить PortMapper(HttpSecurity#(getSharedObject(class))), другие объекты, предоставляющие SecurityConfigurer, используют PortMapper для перенаправления с HTTP на HTTPS или с HTTPS на HTTP. По умолчанию Spring Security использует PortMapperImpl для сопоставления HTTP-порта 8080 с HTTPS-портом 8443 и HTTP-порта 80 с HTTPS-портом 443.
jee() Настройте предварительную аутентификацию на основе контейнера. В этом случае аутентификация управляется контейнером сервлетов.
x509() Настройка аутентификации на основе x509
rememberMe Позволяет настроить аутентификацию «запомнить меня»
authorizeRequests() Разрешить ограниченный доступ на основе использования HttpServletRequest
requestCache() Позволяет настроить кэширование запросов
exceptionHandling() Разрешить обработку ошибок конфигурации
securityContext() Настройте управление SecurityContext в SecurityContextHolder между HttpServletRequests. При использовании WebSecurityConfigurerAdapter это будет применяться автоматически.
servletApi() Интегрируйте метод HttpServletRequest с найденным в нем значением в SecurityContext. При использовании WebSecurityConfigurerAdapter это будет применяться автоматически.
csrf() Добавлена ​​поддержка CSRF, включенная по умолчанию при использовании WebSecurityConfigurerAdapter.
logout() Добавить поддержку выхода из системы. Это будет применяться автоматически при использовании WebSecurityConfigurerAdapter. По умолчанию доступ к URL-адресу "/logout", аннулирование сеанса HTTP для очистки пользователя, удаление всех настроенных аутентификаций #rememberMe(), удаление SecurityContextHolder и перенаправление на "/login?success"
anonymous() Позволяет настроить способ представления для анонимных пользователей. Это будет применяться автоматически в сочетании с WebSecurityConfigurerAdapter. По умолчанию анонимные пользователи будут представлены с использованием org.springframework.security.authentication.AnonymousAuthenticationToken и включают роль «ROLE_ANONYMOUS».
formLogin() Указывает, что проверка подлинности на основе форм поддерживается. Если FormLoginConfigurer#loginPage(String) не указан, будет создана страница входа по умолчанию.
oauth2Login() Настройте аутентификацию для внешнего провайдера OAuth 2.0 или OpenID Connect 1.0.
requiresChannel() Настройте безопасность канала. Чтобы эта конфигурация была полезной, необходимо предоставить хотя бы одно сопоставление с желаемым каналом.
httpBasic() Настройка базовой HTTP-аутентификации
addFilterBefore() Добавить фильтр перед указанным классом фильтра
addFilterAt() Добавить фильтр в расположение указанного класса фильтра
addFilterAfter() Добавить фильтр после указанного класса фильтра
and() Соединитель для подключения вышеуказанных политик для объединения политик безопасности. на самом деле означает "и"

4. Резюме

На данный момент мы многое узнали оSpring Securityзнание. Мы начали настройку для достижения некоторых практических функций.В начале следующих статей мы проведем некоторые практические операции в сочетании с реальными сценариями разработки. Обратите внимание на общедоступный номер:FelordcnПолучить соответствующие учебники как можно скорее.

关注公众号:Felordcn获取更多资讯

Личный блог: https://felord.cn