Spring boot Security Nonaktifkan keamanan

93

Ketika saya menggunakan security.basic.enabled = false untuk menonaktifkan keamanan di proyek Spring Boot yang memiliki dependensi berikut:

    <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>

Saya melihat Pengecualian berikut :

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: {}

Untuk memperbaiki pengecualian ini saya harus menambahkan properti - management.security.enabled = false . Pemahaman saya adalah bahwa ketika aktuator berada di classpath, baik security.basic.enabled = false dan management.security.enabled = false harus disetel untuk menonaktifkan keamanan.

Bisakah seseorang memberi tahu saya jika pemahaman saya salah?

pengguna3600073
sumber
1
Mengapa Anda memerlukan keamanan di classpath jika Anda hanya ingin menonaktifkan semuanya? Bagaimanapun, pelacakan tumpukan Anda tidak lengkap sehingga tidak ada cara untuk mengetahui apa yang mencegah aplikasi untuk dimulai. Saya berharap ini akan dimulai, tetapi titik akhir aktuator harus tetap aman sampai Anda membukanya secara eksplisit.
Dave Syer
@DaveSyer Saya ingin menonaktifkan keamanan sementara dan juga kode aplikasi saya merujuk stoples keamanan untuk bekerja.
Stackee007
Anda masih belum memposting informasi yang cukup untuk melihat mengapa aplikasi tidak dimulai. Jejak tumpukan penuh akan menjadi permulaan.
Dave Syer
2
@DaveSyer Salah satu alasannya adalah layanan mikro yang mengelola musim semi-detik-oauth2 ClientDetails. Anda akan memiliki impor keamanan pegas transitif tetapi mungkin tidak menginginkan autentikasi dasar dalam layanan Anda.
Dirk Lachowski

Jawaban:

79

Yang juga tampaknya berfungsi dengan baik adalah membuat file application-dev.propertiesyang berisi:

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

Jika Anda kemudian memulai aplikasi Spring Boot dengan devprofil tersebut, Anda tidak perlu masuk.

Wim Deblauwe
sumber
1
security.basic.enabled = false tidak diperlukan jika Anda menonaktifkan keamanan dengan management.security.enabled = false
hennr
Saya juga menambahkan security.ignored=/**kemudian bekerja. stackoverflow.com/a/36280413/3291867
mojtab23
11
Ini sekarang sudah usang!
Eagle_Eye
6
Memang. Lihat spring.io/blog/2017/09/15/… untuk info lebih lanjut tentang penghentian yang terjadi di Spring Boot 2
Wim Deblauwe
72

Jika Anda memiliki aktuator pegas dalam paket Anda, Anda harus menambahkan yang berikut ini

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

Dengan sepatu bot musim semi yang lebih tua, kelas itu dipanggil ManagementSecurityAutoConfiguration.

Di versi yang lebih baru ini telah berubah menjadi

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

Jika Anda memerlukan keamanan sebagai dependensi tetapi tidak ingin Spring Boot mengonfigurasinya untuk Anda, Anda dapat menggunakan pengecualian ini:

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

Untuk Spring Boot 2, properti berikut tidak digunakan lagi dalam konfigurasi application.yml

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

Untuk menonaktifkan keamanan untuk Sprint Boot 2 Basic + Actuator Security, properti berikut dapat digunakan dalam file application.yml sebagai ganti pengecualian berbasis anotasi (@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

Untuk sintaks application.properties akan seperti

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

Untuk pengguna boot musim semi 2 itu harus

@EnableAutoConfiguration(exclude = {
    org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class
})
gkatzioura.dll
sumber
1
Apa yang terjadi pada ManagementWebSecurityAutoConfiguration di boot musim semi 2.0
Viyaan Jhiingade
Anda mungkin masih harus mengomentari @EnableWebSecurityanotasi Anda
Victor Petit
5

Tambahkan kelas berikut ke dalam kode Anda

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();
    }

}

Dan insie dari application.properties menambahkan

security.ignored=/**
security.basic.enabled=false
management.security.enabled=false
vaquar khan
sumber
5

Jika Anda menggunakan @WebMvcTestanotasi di kelas pengujian Anda

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

tidak membantu Anda.

Anda dapat menonaktifkan keamanan di sini

@WebMvcTest(secure = false)
Mykola Shorobura
sumber
4

Jawabannya adalah mengizinkan semua permintaan di WebSecurityConfigurerAdapter seperti di bawah ini.

Anda dapat melakukan ini di kelas yang sudah ada atau di kelas baru.

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

Harap diperhatikan: Jika sudah ada kelas GlobalMethodSecurityConfiguration, Anda harus menonaktifkannya.

U_R_Naveen UR_Naveen
sumber
Tidak bekerja. Tapi yang ini berhasil untuk saya stackoverflow.com/questions/23894010/…
Ravi MCA
Hai ravi, sesuai solusi Anda, tidak disarankan untuk menonaktifkan csrf dalam produksi sebagai "http.csrf.disable ()". apakah Anda mendapatkan masalah CSRF untuk panggilan POST, dll?
U_R_Naveen UR_Naveen
3

Izinkan akses ke semuanya menggunakan antMatchers ("/")

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

Saya hanya menambahkan security.ignored=/**dalam application.properties, dan yang melakukan pesona.

codereal
sumber
Jadi itu berarti mekanisme keamanan otomatis masih ada tetapi mengabaikan semua jalur. Saya tidak akan nyaman menyimpan hal-hal yang tidak diperlukan
Paramvir Singh Karwal
2

Untuk menghindari keamanan, Anda dapat menggunakan anotasi. Gunakan anotasi ini di atas kelas konfigurasi:

@EnableWebSecurity

Sebagai contoh:

@EnableWebSecurity
@Configuration
public class AuthFilter{
   // configured method 
}
Ramesh Babu
sumber
15
Mengapa harus @EnableWebSecuritymenonaktifkan Keamanan Web?
lilalinux
2

Anda perlu menambahkan entri ini ke application.properties untuk melewati Keamanan Default Springboot

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

Maka tidak akan ada kotak otentikasi. otrws, kredensial adalah: - userdan 99b962fa-1848-4201-ae67-580bdeae87e9 (kata sandi dibuat secara acak)

Note: my springBootVersion = '1.5.14.RELEASE'

Titus
sumber
tanpa ini, security.basic.enabled = false management.security.enabled = false security.ignored = / ** tidak cukup kan normal?
Bilgehan
2

Anda dapat mengonfigurasi untuk beralih keamanan pegas dalam proyek Anda dengan mengikuti 2 langkah di bawah ini:

LANGKAH 1: Tambahkan @ConditionalOnPropertyanotasi di atas kelas SecurityConfig Anda. Lihat di bawah ini:

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

LANGKAH 2: Tambahkan konfigurasi berikut ke file application.propertiesatau Anda application.yml.

application.properties

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

ATAU

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false
Sahil Chhabra
sumber
Apakah mungkin menggunakan hanya satu properti?
wakedeer
@wakedeer, komentar Anda tampak samar, dapatkah Anda menjelaskan lebih lanjut?
Sahil Chhabra
1

Satu-satunya hal yang berhasil untuk saya:

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

dan

security.ignored=/**

Bisa jadi bagian properti itu mubazir atau bisa dilakukan dalam kode, tapi tidak sempat bereksperimen. Pokoknya bersifat sementara.

alexcorghencea
sumber
1

Cara termudah untuk Spring Boot 2 tanpa ketergantungan atau perubahan kode adalah:

spring:
  autoconfigure:
    exclude: org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration
Przemek Nowak
sumber
2
Ini tidak berfungsi dengan Spring Boot v2.2.2.RELEASE
Pra_A
0

Tambahkan baris di bawah ini ke aplikasi utama Anda.

Hapus org.activiti.spring.boot.SecurityAutoConfiguration.class jika Anda tidak menggunakan activiti.

Demikian pula, hapus satu untuk aktuator jika Anda tidak menggunakan aktuator pegas.

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

Seperti yang disebutkan sebelumnya beberapa solusi untuk menonaktifkan keamanan melalui komentar

@Jamur_kejang

anotasi dan lainnya adalah melalui properti di application.properties atau yml. Tetapi properti tersebut ditampilkan sebagai tidak digunakan lagi dalam versi boot musim semi terbaru.

Jadi, saya ingin berbagi pendekatan lain untuk mengonfigurasi nama pengguna dan kata sandi default di application-dev.properties atau application-dev.yml Anda dan menggunakannya untuk masuk ke swagger dan lain-lain di lingkungan pengembangan.

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

Jadi, pendekatan ini juga akan memberi Anda semacam keamanan dan Anda dapat membagikan informasi ini dengan tim pengembangan Anda. Anda juga dapat mengonfigurasi peran pengguna, tetapi tidak diperlukan di tingkat pengembangan.

Nallamachu
sumber
-3

Saya menambahkan pengaturan di bawah ini di application.yml dan bekerja dengan baik.

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

ini dapat dikonversi security.route-paterns-to-be-skipped=/**/*untuk application.properties

Prasath Rajan
sumber
1
Properti ini tidak ada sama sekali.
Drakes