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