В чем разница между @EnableWebSecurity и @EnableWebMvcSecurity?
@EnableWebSecurity
Документация JavaDoc:
Добавьте эту аннотацию в класс @Configuration
, чтобы иметь конфигурацию Spring Security
, определенную в любом WebSecurityConfigurer
, или, скорее, путем расширения базового класса WebSecurityConfigurerAdapter
и переопределения отдельных методов.
@EnableWebMvcSecurity
Документация JavaDoc:
Добавьте эту аннотацию в класс @Configuration
, чтобы конфигурация Spring Security
интегрировалась с Spring MVC
.
- Что именно означает "интегрироваться с Spring MVC"? Какое дополнительное поведение я получаю?
- Я нашел guides и ответы, которые предполагают, что эта аннотация добавляет
CSRF Tokens
в Spring MVC
Forms, это единственное, что он добавляет?
Ответы
Ответ 1
Если вы посмотрите на эти классы, @EnableWebMvcSecurity
фактически добавляет аннотацию @EnableWebSecurity
в WebMvcSecurityConfiguration
. Поэтому @EnableWebMvcSecurity
делает все, что делает @EnableWebSecurity
, и немного больше.
Что еще вы спрашиваете?
Если вы посмотрите WebMvcSecurityConfiguration
, вы увидите, что он добавляет AuthenticationPrincipalArgumentResolver
, чтобы вы могли получить доступ к основному лицу аутентификации, добавив аннотацию к аргументу метода контроллера. то есть:.
public String show(@AuthenticationPrincipal CustomUser customUser) {
// do something with CustomUser
return "view";
}
Он также интегрируется с Spring Web MVC для добавления маркера CSRF в формы.
Ответ 2
Как и для Spring Безопасность 4.0, @EnableWebMvcSecurity
устарела. Замена @EnableWebSecurity
, который определит добавление функций Spring MVC основанный на пути к классам.
Чтобы включить Spring Интеграция безопасности с Spring MVC, добавьте @EnableWebSecurity
аннотации к вашей конфигурации.
источник