Свойство security.basic.enabled устарело: автоконфигурация безопасности больше не настраивается

Я работаю над проектом Весеннее облако, используя версию весна-загрузка-стартер-родитель2.0.1.РЕЛИЗ.

Я получаю предупреждение ниже, похоже

Property 'security.basic.enabled' is Deprecated: The security auto-configuration is no longer customizable. Provide your own WebSecurityConfigurer bean instead.

безопасность: базовый: enabled: false отключен в последней версии Spring Security.

Не могли бы вы посоветовать мне, что мне использовать вместо этого?

application.yml

---
server:
  port: 8888

security:
  basic:
    enabled: false

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls

          search-paths:
          - 'station*'
          repos:
            perf:
              pattern:
                - '*/perf'
              uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls-perf
              search-paths:
               - 'station*'

pom.xml

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.BUILD-SNAPSHOT</spring-cloud.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>${spring-cloud.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

Свойство security.basic.enabled устарело: автоконфигурация безопасности больше не настраивается

Вот мой тестовый класс.

@RunWith(SpringRunner.class)
@SpringBootTest
public class PluralsightSpringcloudM2ConfigserverGitApplicationTests {

    @Test
    public void contextLoads() {
    }

}

а также Свойство security.basic.enabled устарело: автоконфигурация безопасности больше не настраивается

Это не имеет ничего общего с другим вопросом

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
31
0
48 216
5
Перейти к ответу Данный вопрос помечен как решенный

Ответы 5

Spring Boot 2.0 изменил свою автоматическую конфигурацию (включая некоторые свойства) и теперь имеет единственное поведение, которое отключается, как только вы добавляете свой собственный WebSecurityConfigurerAdapter. Конфигурация по умолчанию выглядит так

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

По умолчанию настроен один пользователь со сгенерированным паролем. Чтобы настроить этого пользователя, используйте свойства в spring.security.user.

spring.security.user.name=user # Default user name.
spring.security.user.password= # Password for the default user name.
spring.security.user.roles= # Granted roles for the default user name.

Следующие свойства были удалены из Spring Boot 2:

security.basic.authorize-mode
security.basic.enabled
security.basic.path
security.basic.realm
security.enable-csrf
security.headers.cache
security.headers.content-security-policy
security.headers.content-security-policy-mode
security.headers.content-type
security.headers.frame
security.headers.hsts
security.headers.xss
security.ignored
security.require-ssl
security.sessions

Замены (если есть) можно найти здесь: Приложение A. Общие свойства приложения

Для ясности: если вы создаете настраиваемый WebSecurityConfigurerAdapter, конфигурация безопасности по умолчанию будет заменена вашей настраиваемой конфигурацией:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // For example: Use only Http Basic and not form login.
        http
            .authorizeRequests()
                .anyRequest().authenticated()
                .and()
            .httpBasic();
    }
}

Для получения дополнительной информации посетите Spring 2.0 Руководство по миграции.

security.basic.enabled также устарел. Какая правильная замена?

Jeff Cook 08.04.2018 14:31

@SayaliShinde Это зависит от того, чего вы хотите достичь. Если вы просто хотите отключить HTTP Basic (и вообще не имеете аутентификации), удалите зависимость от spring-boot-starter-security. Если вы хотите настроить другую аутентификацию (например, форму входа или openid), HttpSecurity предоставляет методы для настройки желаемой безопасности.

sn42 08.04.2018 15:02

@ sn42 Ваш ответ сам по себе очень информативен и полезен, я ценю его. Действительно, очень хороший ответ =) Но не на этот вопрос. Мы просто перемещаем охранную недвижимость под пружину. Кстати, я не голосовал против. Я просто хотел указать на самое простое решение.

ozgur 09.10.2018 20:54

Я бы попробовал на вашем тестовом классе следующее:

@SpringBootTest(properties = "spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration")

Это отключит автоконфигурацию spring -security в контексте вашего тестового класса.

Обновлено: если это не ограничивается контекстом тестовых классов, то же самое можно применить к:

@SpringBootApplication(exclude = "org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration")

или иначе, в вашем application.yaml вы можете:

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

Потому что говорят "устарело", но свойство фактически перестало работать в 2.0. Если это не только для тестового класса, но и в целом, одним из способов было бы предоставить свой собственный WebSecurityConfigurerAdapter, как предлагает sn42, или посмотреть мой обновленный ответ

guido 08.04.2018 14:31

Похоже, пакет изменился в Spring Boot 2.2.2.RELEASE, spring.autoconfigure.exclude=org.springframework.boot.autoco‌​nfigure.security.ser‌​vlet.SecurityAutoCon‌​figuration.SecurityA‌​utoConfiguration; все еще не работает

Pra_A 04.01.2020 16:56

Таким образом, spring.autoconfigure.exclude=org.springframework.boot.autoco‌​nfigure.security.Sec‌​urityAutoConfigurati‌​on и наличие зависимости от пружинной безопасности дает Несанкционированные

Pra_A 19.04.2020 21:35
Ответ принят как подходящий

Таким образом я смог решить эту проблему. Хотя не уверен. Я только что поправил application.yml

---
server:
  port: 8888


spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls

          search-paths:
          - 'station*'
          repos:
            perf:
              pattern:
                - '*/perf'
              uri: https://github.com/rseroter/pluralsight-spring-cloudconfig-wa-tolls-perf
              search-paths:
               - 'station*'
  security:
    user:
      name: test
      password: test

Когда я получаю доступ к URL-адресу: http: // локальный: 8888 / s1rates / по умолчанию, он запрашивает у меня имя пользователя и пароль, и я получаю результат ниже.

это не работает!

გენო მუმლაძე 26.12.2020 14:14

Если вы используете Spring реактивную безопасность, нам нужно сделать что-то вроде этого,

@Bean
  public SecurityWebFilterChain springWebFilterChain(ServerHttpSecurity http) {
    http.authorizeExchange().anyExchange().permitAll();
    return http.build();
  }

По этому поводу есть еще одна статья о stackoverflow, Spring boot 2.0 отключить безопасность по умолчанию

Это потому, что, когда вы пишете security.basic.enabled = false, вы в основном говорите приложению, что я не забочусь о безопасности и разрешаю все запросы, что угодно. После весенней загрузки 2.0 вы не можете просто написать эту конфигурацию, чтобы сделать приложение небезопасным. Для этого вам нужно написать код. Или вы можете просто скопировать следующее.

package com.LockheedMartin.F22Simulator;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }
}

Кстати, вам следует удалить security.basic.enabled = false из вашего application.properties, поскольку spring 2.*.* больше не понимает это свойство, и если у вас есть правильная настройка Intellij, вы должны увидеть предупреждение с надписью 'unsupported property'.

пакет com.LockheedMartin.F22Simulator; OMG, какой хороший код.

Ryane Luo 26.06.2019 09:13

Ваше решение не помогло мне полностью исправить это: оно разрешило нежелательный 401 в моих интеграционных тестах, но вместо этого я получил 403. Я смог решить эту проблему с помощью этого ответа: stackoverflow.com/a/49261864/3149048

Stephanie 14.02.2020 10:05

Другие вопросы по теме