Подтвердить что ты не робот

Удалите "Использование пароля безопасности по умолчанию" в Spring Загрузка

Я добавил один пользовательский Security Config в мое приложение в Spring Boot, но сообщение об использовании пароля безопасности по умолчанию все еще присутствует в файле LOG.

Можно ли его удалить? Мне не нужен этот пароль по умолчанию. Кажется, что Spring Boot не распознает мою политику безопасности.

@Configuration
@EnableWebSecurity
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {

    private final String uri = "/custom/*";

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.headers().httpStrictTransportSecurity().disable();
        http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);

        // Authorize sub-folders permissions
        http.antMatcher(uri).authorizeRequests().anyRequest().permitAll();
    }
}
4b9b3361

Ответ 1

Я нашел решение об исключении класса SecurityAutoConfiguration.

Пример:

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
public class ReportApplication {

    public static void main(String[] args) throws Exception {
        SpringApplication.run(MyApplication.class, args);
    }
}

Ответ 2

Добавление следующего в application.properties работало для меня,

security.basic.enabled=false

Не забудьте перезапустить приложение и проверить консоль.

Ответ 3

Хотя это работает, текущее решение немного излишне, как отмечено в некоторых комментариях. Так что вот альтернатива, которая работает для меня, используя последнюю версию Spring Boot (1.4.3).

Пароль безопасности по умолчанию настраивается в классе Spring Boot AuthenticationManagerConfiguration. Этот класс имеет условную аннотацию, предотвращающую загрузку, если компонент AuthenticationManager уже определен.

Следующий код работает для предотвращения выполнения кода внутри AuthenticationManagerConfiguration, потому что мы определяем наш текущий AuthenticationManager как компонент.

@Configuration
@EnableWebSecurity
public class MyCustomSecurityConfig extends WebSecurityConfigurerAdapter{

[...]

@Override
protected void configure(AuthenticationManagerBuilder authManager) throws Exception {
    // This is the code you usually have to configure your authentication manager.
    // This configuration will be used by authenticationManagerBean() below.
}

@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    // ALTHOUGH THIS SEEMS LIKE USELESS CODE,
    // IT REQUIRED TO PREVENT SPRING BOOT AUTO-CONFIGURATION
    return super.authenticationManagerBean();
}

}

Ответ 4

Используя Spring Boot 2.0.4, я столкнулся с той же проблемой.

Исключение SecurityAutoConfiguration.class действительно уничтожило мое приложение.

Теперь я использую @SpringBootApplication(exclude= {UserDetailsServiceAutoConfiguration.class})

Прекрасно работает с @EnableResourceServer и JWT :)

Ответ 5

Посмотрите вверх: http://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-security.html

Из AuthenticationManagerConfiguration.java просматривая код, я вижу ниже. Также конфигурация в памяти является резервным, если менеджер аутентификации не предоставляется по Javadoc. Ваша предыдущая попытка Injecting Authentication Manager будет работать, потому что вы больше не будете использовать аутентификацию внутри памяти, и этот класс будет недоступен.

@Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception {
        if (auth.isConfigured()) {
            return;
        }
        User user = this.securityProperties.getUser();
        if (user.isDefaultPassword()) {
            logger.info("\n\nUsing default security password: " + user.getPassword()
                    + "\n");
        }
        Set<String> roles = new LinkedHashSet<String>(user.getRole());
        withUser(user.getName()).password(user.getPassword()).roles(
                roles.toArray(new String[roles.size()]));
        setField(auth, "defaultUserDetailsService", getUserDetailsService());
        super.configure(auth);
    }

Если вы используете аутентификацию inmemory по умолчанию, настройте конфигурацию вашего регистратора для org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration и удалите это сообщение.

Ответ 6

Это не сработало для меня, когда я исключил SecurityAutoConfiguration с помощью аннотации @SpringBootApplication, но сработало, когда я исключил его в @EnableAutoConfiguration:

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class })

Ответ 7

Если вы декларируете свои конфиги в отдельном пакете, убедитесь, что вы добавили проверку компонентов следующим образом:

@SpringBootApplication
@ComponentScan("com.mycompany.MY_OTHER_PACKAGE.account.config")

    public class MyApplication {

        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }



    }

Вам также может понадобиться добавить аннотацию @component в классе config следующим образом:

  @Component
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()

.....
  1. Также очистите кеш браузера и запустите приложение весенней загрузки в режиме инкогнито

Ответ 8

Для Reactive Stack (Spring Webflux, Netty) вам необходимо либо исключить ReactiveUserDetailsServiceAutoConfiguration.class

@SpringBootApplication(exclude = {ReactiveUserDetailsServiceAutoConfiguration.class})

Или определите bean-компонент ReactiveAuthenticationManager (есть разные реализации, вот один из примеров JWT)

@Bean
public ReactiveJwtDecoder jwtDecoder() {
    return new NimbusReactiveJwtDecoder(keySourceUrl);
}
@Bean
public ReactiveAuthenticationManager authenticationManager() {
    return new JwtReactiveAuthenticationManager(jwtDecoder());
}

Ответ 9

При использовании spring загрузки мы должны исключить класс SecurityAutoConfiguration.class как в классе приложения, так и в том, где именно вы настраиваете защиту, как показано ниже.

Тогда только мы можем избежать пароля безопасности по умолчанию.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })
@EnableJpaRepositories
@EnableResourceServer
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
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
    @EnableAutoConfiguration(exclude = { 
            org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class 
        })
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity httpSecurity) throws Exception {
            httpSecurity.authorizeRequests().anyRequest().authenticated();
            httpSecurity.headers().cacheControl();
        }
    }

Ответ 10

Проверьте документацию для org.springframework.boot.autoconfigure.security.servlet.UserDetailsServiceAutoConfiguration, если есть условия, когда autoconfig будет остановлен.

В моем случае я забыл определить свой пользовательский AuthenticationProvider как bean-компонент.

@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(getAuthenticationProvider());
    }

    @Bean
    AuthenticationProvider getAuthenticationProvider() {
        return new CustomAuthenticationProvider(adminService, onlyCorporateEmail);
    }
}

Ответ 11

Если вы используете версию Spring Boot> = 2.0, попробуйте установить этот bean-компонент в вашей конфигурации:

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

Ссылка: fooobar.com/questions/14664178/...

Ответ 12

При весенней загрузке 2 с webflux вам нужно определить ReactiveAuthenticationManager

Ответ 13

Также возможно просто отключить ведение журнала для этого конкретного класса в свойствах:

logging.level.org.springframework.boot.autoconfigure.security.AuthenticationManagerConfiguration=WARN

Ответ 14

Просто используйте строки ниже:

spring.security.user.name=XXX
spring.security.user.password=XXX

установить имя пользователя и пароль безопасности по умолчанию в ваших application.properties (имя может отличаться) в контексте приложения Spring.

Чтобы вообще избежать настройки по умолчанию (как части автоконфигурации SpringBoot) - используйте подход, упомянутый в Ответах ранее:

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class })

или же

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class })

Ответ 15

Удалите защиту от спама с помощью pom, если вы внедрили свой собственный.