Spring boot Security Güvenliği devre dışı bırak


92

Aşağıdaki bağımlılıklara sahip bir Spring Boot projesinde güvenliği devre dışı bırakmak için security.basic.enabled = false kullandığımda :

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</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-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-tomcat</artifactId>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

Aşağıdaki İstisnayı görüyorum :

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.boot.actuate.autoconfigure.ManagementSecurityAutoConfiguration$ManagementWebSecurityConfigurerAdapter': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter.setObjectPostProcessor(org.springframework.security.config.annotation.ObjectPostProcessor); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.security.config.annotation.ObjectPostProcessor] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {}

Bu istisnayı düzeltmek için - management.security.enabled = false özelliğini eklemem gerekiyordu . Benim anlayış aktüatör sınıf yolunda olduğu zaman, hem olmasıdır = security.basic.enabled sahte ve management.security.enabled = false güvenliğini devre dışı bırakmak için ayarlanmalıdır.

Anlayışımın yanlış olup olmadığını lütfen birisi bana bildirebilir mi?


1
Her şeyi devre dışı bırakmak istiyorsanız neden sınıf yolunuzda güvenliğe ihtiyacınız var? Her neyse, yığın izlemeniz eksik olduğundan, uygulamanın başlamasını neyin engellediğini bilmenin bir yolu yoktur. Başlamasını beklerdim, ancak aktüatör uç noktaları siz onları açıkça açana kadar güvende kalmalıdır.
Dave Syer

@DaveSyer Güvenliği geçici olarak devre dışı bırakmak istiyorum ve ayrıca uygulama kodum güvenlik kavanozlarının çalışmasına işaret ediyor.
Stackee007

Hala uygulamanın neden başlamadığını görmek için yeterli bilgi göndermediniz. Tam yığın izleme bir başlangıç ​​olacaktır.
Dave Syer

2
@DaveSyer Bunun bir nedeni, spring-sec-oauth2'yi yöneten bir mikro hizmet olabilir ClientDetails. Geçişli bir yay güvenliğini içe aktaracaksınız, ancak hizmetinizde temel kimlik doğrulama istemeyebilirsiniz.
Dirk Lachowski

Yanıtlar:


79

İyi çalışıyor gibi görünen application-dev.propertiesşey, şunları içeren bir dosya oluşturmaktır :

security.basic.enabled=false
management.security.enabled=false

Daha sonra Spring Boot uygulamanızı devprofille başlatırsanız, oturum açmanıza gerek yoktur.


1
security.basic.enabled = false, güvenliği management.security.enabled = false
hennr

Ben de ekledim security.ignored=/**sonra çalıştım. stackoverflow.com/a/36280413/3291867
mojtab23

10
Bu artık kullanımdan kaldırıldı!
Eagle_eye

6
Aslında. Spring Boot 2
Wim Deblauwe

72

Paketinizde yaylı aktüatör varsa, aşağıdakileri eklemelisiniz

@EnableAutoConfiguration(exclude = {
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class})

Daha eski Spring-boot ile sınıfa çağrıldı ManagementSecurityAutoConfiguration.

Daha yeni sürümlerde bu,

@SpringBootApplication(exclude = {
        org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
        org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class}
        )

39

Bağımlılık olarak güvenliğe ihtiyacınız varsa ancak Spring Boot'un sizin için yapılandırmasını istemiyorsanız, bu dışlamayı kullanabilirsiniz:

    @EnableAutoConfiguration(exclude = { 
        org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class 
    })

21

Yaylı önyükleme 2 kullanıcı için,

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})

1
Yay çizme 2.0 ManagementWebSecurityAutoConfiguration ne oldu
Viyaan Jhiingade

Yine de @EnableWebSecurityek açıklamanıza yorum yapmanız gerekebilir
Victor Petit

21

İçin Spring Boot 2 Aşağıdaki özellikler artık kullanılmamaktadır application.yml konfigürasyon

  security.basic.enabled: false
  management.security.enabled: false

Sprint Boot 2 Basic + Actuator Security için güvenliği devre dışı bırakmak için aşağıdaki özellikler, açıklama tabanlı dışlama yerine application.yml dosyasında kullanılabilir (@EnableAutoConfiguration (exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class}))

  spring:
    autoconfigure:
      exclude[0]: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
      exclude[1]: org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration

İçin application.properties sözdizimi gibi olurdu

spring.autoconfigure.exclude[0]=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration


5

Kodunuza aşağıdaki sınıfı ekleyin

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;

/**
 * @author vaquar khan
 */
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

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

        http.authorizeRequests().antMatchers("/**").permitAll().anyRequest().authenticated().and().csrf().disable();
    }

}

Ve uygulama insie.properties ekle

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false

5

@WebMvcTestTest sınıfınızda not kullanıyorsanız

@EnableAutoConfiguration(exclude = { SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class })
@TestPropertySource(properties = {"spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration"})

sana yardım etmiyor.

Güvenliği buradan devre dışı bırakabilirsiniz

@WebMvcTest(secure = false)

4

Yanıt, aşağıdaki gibi WebSecurityConfigurerAdapter içindeki tüm isteklere izin vermektir.

bunu mevcut sınıfta veya yeni sınıfta yapabilirsiniz.

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().anyRequest().permitAll();
    }

Lütfen dikkat: Mevcut GlobalMethodSecurityConfiguration sınıfı varsa, onu devre dışı bırakmalısınız.


Çalışmadı. Ama bu benim için çalıştı stackoverflow.com/questions/23894010/…
Ravi MCA

Merhaba ravi, çözümünüze göre, üretimde csrf'yi "http.csrf.disable ()" olarak devre dışı bırakmanız önerilmez. POST vb. aramalar için CSRF sorunu yaşadınız mı?
U_R_Naveen UR_Naveen

3

AntMatchers ("/") kullanarak her şeye erişime izin ver

     protected void configure(HttpSecurity http) throws Exception {
            System.out.println("configure");
                    http.csrf().disable();
                    http.authorizeRequests().antMatchers("/").permitAll();
        }

3

Ben sadece eklenen security.ignored=/**içinde application.propertiesve bu çekicilik yaptı.


Bu, otomatik güvenlik mekanizmasının hala yürürlükte olduğu ancak tüm yolları görmezden geldiği anlamına gelir. Gerekli olmayan şeyleri saklamakta rahat
olmazdım

2

Güvenlikten kaçınmak için ek açıklamaları kullanabilirsiniz. Yapılandırma sınıfının en üstünde bu ek açıklamayı kullanın:

@EnableWebSecurity

Örneğin:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}

15
@EnableWebSecurityWeb Güvenliği neden devre dışı bırakılmalıdır ?
lilalinux

2

Springboot Varsayılan Güvenliğini atlamak için bu girişi application.properties öğesine eklemeniz gerekir.

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

O zaman herhangi bir kimlik doğrulama kutusu olmayacak. otrws, kimlik bilgileri şunlardır: - userve 99b962fa-1848-4201-ae67-580bdeae87e9 (parola rastgele oluşturulur)

Note: my springBootVersion = '1.5.14.RELEASE'


bu olmadan security.basic.enabled = false management.security.enabled = false security.ignored = / ** yeterli değil normal mi?
Bilgehan

2

Aşağıdaki 2 adımı izleyerek projenizde yay güvenliğini değiştirmek için yapılandırabilirsiniz :

ADIM 1:@ConditionalOnProperty SecurityConfig sınıfınızın üstüne bir açıklama ekleyin . Aşağıya bakın:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity (prePostEnabled = true)
@ConditionalOnProperty (name = "myproject.security.enabled", havingValue = "true", matchIfMissing = true)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
   // your security config
}

ADIM 2: Aşağıdaki yapılandırmayı application.propertiesveya application.ymldosyanıza ekleyin .

application.properties

security.ignored=/**
myproject.security.enabled=false

VEYA

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

1

Benim için çalışan tek şey:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests().anyRequest().permitAll();
    }

ve

security.ignored=/**

Özellikler kısmı fazlalık olabilir veya kodda yapılabilir, ancak deneme için zamanım olmayabilir. Neyse geçicidir.


1

Bağımlılıklar veya kod değişiklikleri olmadan Spring Boot 2'nin en kolay yolu şudur:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration

1
Bu, Spring Boot v2.2.2 ile çalışmıyor. RELEASE
Pra_A

0

Aşağıdaki satırları ana uygulamanıza ekleyin.

Activiti kullanmıyorsanız org.activiti.spring.boot.SecurityAutoConfiguration.class öğesini kaldırın.

Benzer şekilde, yaylı önyükleme aktüatörü kullanmıyorsanız aktüatör için olanı çıkarın.

@EnableAutoConfiguration(exclude = {
org.activiti.spring.boot.SecurityAutoConfiguration.class,
org.springframework.boot.actuate.autoconfigure.ManagementWebSecurityAutoConfiguration.class,
org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration.class })

0

Daha önce birden fazla çözümün yorum yaparak güvenliği devre dışı bırakmak için bahsedildiği

@Evleneceksen

ek açıklama ve diğer, application.properties veya yml'deki özellikler aracılığıyladır. Ancak bu özellikler en son ilkbahar önyükleme sürümünde kullanımdan kaldırılmış olarak görünüyor.

Bu nedenle, application-dev.properties veya application-dev.yml'de varsayılan kullanıcı adı ve parolayı yapılandırmak ve bunları geliştirme ortamında swagger vb.

spring.security.user.name=admin
spring.security.user.password=admin

Bu nedenle, bu yaklaşım size bir tür güvenlik de sağlayacaktır ve bu bilgileri geliştirme ekibinizle paylaşabilirsiniz. Kullanıcı rollerini de yapılandırabilirsiniz, ancak geliştirme düzeyinde gerekli değildir.


-3

Application.yml'de aşağıdaki ayarları ekledim ve iyi çalıştı.

security:
    route-patterns-to-be-skipped:
      - /**/*

bu, security.route-paterns-to-be-skipped=/**/*application.properties olarak dönüştürülebilir


1
Bu özellik hiç mevcut değil.
Drakes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.