В Spring Boot 1.5.x у меня была настроена безопасность, и в некоторых профилях (например, локальных) я добавил строку security.basic.enabled=false в файл .properties, чтобы отключить всю безопасность для этого профиля. Я пытаюсь перейти на новую версию Spring Boot 2, где это свойство конфигурации удалено. Как добиться такого же поведения (без использования этого свойства) в Spring Boot 2.0.x?
Я уже читал Spring-Загрузка-Безопасность-2.0 и безопасность-изменения-в-пружине-загрузки-2-0-м4, и ничего об этом свойстве нет.
@ KeatsPeeks Да, это правда. Вот почему я спрашиваю, как добиться такого же поведения в Spring Boot 2 (конечно, без этого свойства).
@dur Да, это тоже правда. Вот почему я спрашиваю, как это сделать. Большинство ответов SO по отключению безопасности используют это свойство конфигурации. Все остальные используют аннотацию профиля, чтобы отключить компонент конфигурации для определенных профилей, но это не то поведение, которое я хочу, поскольку Spring Security требует входа в систему по умолчанию. Я хочу полностью отключить вход в систему для этих определенных профилей.




Вот как я решил проблему. Вот пример того, как моя конфигурация безопасности выглядела в Spring Boot 1.5.x. Безопасность была отключена свойством security.basic.enabled=false:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/upload/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
Поскольку security.basic.enabled был удален в Spring Boot 2 (но все еще зарезервирован как имя свойства), я в конечном итоге использовал security.enabled в качестве настраиваемого свойства. Вот пример того, как моя конфигурация выглядит в Spring Boot 2:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${security.enabled:true}")
private boolean securityEnabled;
@Override
public void configure(WebSecurity web) throws Exception {
if (securityEnabled)
web.ignoring().antMatchers("/upload/**");
else
web.ignoring().antMatchers("/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
if (securityEnabled)
http.csrf().disable().authorizeRequests()
.anyRequest().authenticated()
.and().httpBasic();
}
}
Думаю наиболее полный ответ imo .... Для security.ignored = "* .js". что, если вы хотите игнорировать некоторые статические ресурсы, мы все еще используем web.ignore ()? или совсем другое ...
Вы можете добавить @ConditionalOnProperty(prefix = "spring", name = "security.enabled") в класс SecurityConfig, чтобы избежать if-else внутри configure()
Вы должны добавить настраиваемую конфигурацию Spring Security, см. Справочное руководство по Spring Boot:
28.1 MVC Security
The default security configuration is implemented in
SecurityAutoConfigurationandUserDetailsServiceAutoConfiguration.SecurityAutoConfigurationimportsSpringBootWebSecurityConfigurationfor web security andUserDetailsServiceAutoConfigurationconfigures authentication, which is also relevant in non-web applications. To switch off the default web application security configuration completely, you can add a bean of typeWebSecurityConfigurerAdapter(doing so does not disable theUserDetailsServiceconfiguration or Actuator’s security).
Например:
@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/**");
}
}
Чтобы использовать конфигурацию только для профиля, добавьте в класс @Profile. Если вы хотите включить его по свойству, добавьте в класс ConditionalOnProperty.
Обратите внимание, что если у вас есть несколько не исключающих друг друга конфигураций безопасности, вам также следует определить @Order. Например, если ваша основная конфигурация безопасности использует профиль по умолчанию (в нем не указан @Profile) и вы добавляете профиль разработчика в другую конфигурацию, тогда, когда вы работаете с активным профилем разработчика, Spring должен будет решить, какая конфигурация имеет приоритет.
На самом деле для определенных конфигураций на этот вопрос есть несколько ответов; в моем случае я играл с Spring Boot 2 с Spring Security и JWT. Чтобы защитить мои конечные точки REST, мне нужно создать токены и т. д. После того, как я написал свой код и попытался протестировать свои конечные точки, чтобы убедиться, что JWT работает нормально, я оказываюсь перед страницей входа по умолчанию. Я попытался изменить файл свойств, упомянутый выше, и, наконец, отключил его, добавив аннотацию @SpringBootApplication(exclude = {SecurityAutoConfiguration.class} ) в свой класс приложения.
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {
public static void main(String[] args) {
SpringApplication.run(JwtWithSpringBootApplication.class, args);
}
}
Вы ответили не совсем на вопрос, потому что вы отключаете только конфигурацию Spring Boot по умолчанию, но не свою собственную настраиваемую конфигурацию.
Есть еще один вариант отключения безопасности в весенней загрузке 2.
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
Добавьте это поверх основного класса
В весенней загрузке 2.1.4 пришлось это сделать
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})
Это вызвало у меня следующую ошибку времени выполнения: Параметр 0 метода inMemoryUserDetailsManager в org.springframework.boot.autoconfigure.security.servlet.User DetailsServiceAutoCo nfiguration требовал bean типа org.springframework.boot.autoconfigure.security. perties ', которые не удалось найти.
Брэндон, похоже, вам нужна защита?
Весенняя загрузка 2.1.3
Для определенного профиля "dev"
Создайте новый класс конфигурации Spring
@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable {
}
Это отключит пружинную безопасность.
Вы можете отключить автоконфигурацию пружинной защиты, исключив SecurityAutoConfiguration.class, а ManagementWebSecurityAutoConfiguration.class должен быть исключен при получении зависимости пружина-пыльник-привод.
@SpringBootApplication(
exclude = { SecurityAutoConfiguration.class,
ManagementWebSecurityAutoConfiguration.class })
public class MySpringBootApplication {
Затем вы можете условно настроить свой пользовательский WebSecurityConfigurerAdapter, используя профиль или параметр конфигурации примерно так
@Configuration
@ConditionalOnProperty(prefix = "security.custom", name = "enabled", havingValue = "true")
@EnableWebSecurity
public class CustomWebSecurityConfiguration extends WebSecurityConfigurerAdapter {
это свойство указано здесь как критическое изменение: github.com/spring-projects/spring-boot/wiki/…