Spring boot Security ปิดใช้งานความปลอดภัย


93

เมื่อฉันใช้security.basic.enabled = falseเพื่อปิดใช้งานการรักษาความปลอดภัยบนโปรเจ็กต์ Spring Boot ที่มีการอ้างอิงต่อไปนี้:

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

ฉันเห็นข้อยกเว้นต่อไปนี้:

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

เพื่อแก้ไขข้อยกเว้นนี้ผมต้องเพิ่มคุณสมบัติ - management.security.enabled = false ความเข้าใจของฉันคือเมื่อตัวกระตุ้นอยู่ใน classpath ควรตั้งค่าทั้งsecurity.basic.enabled = falseและmanagement.security.enabled = falseเพื่อปิดใช้งานการรักษาความปลอดภัย

ใครก็ได้โปรดแจ้งให้ฉันทราบหากความเข้าใจของฉันไม่ถูกต้อง


1
ทำไมคุณถึงต้องการความปลอดภัยใน classpath ของคุณถ้าคุณแค่ต้องการปิดทุกอย่าง? อย่างไรก็ตามการติดตามสแต็กของคุณไม่สมบูรณ์ดังนั้นจึงไม่มีทางรู้ได้ว่ามีอะไรขัดขวางไม่ให้แอปเริ่มทำงาน ฉันคาดหวังว่ามันจะเริ่มต้น แต่จุดสิ้นสุดของแอคชูเอเตอร์ควรปลอดภัยจนกว่าคุณจะเปิดขึ้นอย่างชัดเจน
Dave Syer

@DaveSyer ฉันต้องการปิดใช้งานการรักษาความปลอดภัยชั่วคราวและรหัสแอปพลิเคชันของฉันอ้างถึงขวดความปลอดภัยในการทำงาน
Stackee007

คุณยังโพสต์ข้อมูลไม่เพียงพอเพื่อดูสาเหตุที่แอปไม่เริ่มทำงาน การติดตามสแต็กแบบเต็มจะเป็นการเริ่มต้น
Dave Syer

2
@DaveSyer ClientDetailsเหตุผลหนึ่งที่จะเป็นฤดูใบไม้ผลิ คุณจะมีการนำเข้าการรักษาความปลอดภัยแบบสปริง แต่อาจไม่ต้องการการรับรองความถูกต้องพื้นฐานในบริการของคุณ
Dirk Lachowski

คำตอบ:


79

สิ่งที่ดูเหมือนว่าจะทำงานได้ดีคือการสร้างไฟล์application-dev.propertiesที่มี:

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

หากคุณเริ่มแอป Spring Boot ด้วยdevโปรไฟล์คุณไม่จำเป็นต้องเข้าสู่ระบบ


1
security.basic.enabled = false ไม่จำเป็นหากคุณปิดใช้งานการรักษาความปลอดภัยด้วย management.security.enabled = false
hennr

ฉันยังเพิ่มsecurity.ignored=/**แล้วทำงาน stackoverflow.com/a/36280413/3291867
mojtab23

11
ตอนนี้เลิกใช้แล้ว!
Eagle_Eye

6
แน่นอน. ดูspring.io/blog/2017/09/15/…สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเลิกใช้งานที่เกิดขึ้นใน Spring Boot 2
Wim Deblauwe

72

ในกรณีที่คุณมีสปริงบูต - แอคชูเอเตอร์ในแพ็คเกจของคุณคุณควรเพิ่มสิ่งต่อไปนี้

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

ManagementSecurityAutoConfigurationกับฤดูใบไม้ผลิเก่าบูตระดับที่เรียกว่า

ในเวอร์ชันที่ใหม่กว่าสิ่งนี้ได้เปลี่ยนเป็น

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

39

หากคุณต้องการความปลอดภัยเป็นที่พึ่ง แต่ไม่ต้องการให้ Spring Boot กำหนดค่าให้คุณคุณสามารถใช้การยกเว้นนี้:

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

23

สำหรับSpring Boot 2คุณสมบัติต่อไปนี้เลิกใช้ในการกำหนดค่าapplication.yml

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

หากต้องการปิดใช้งานการรักษาความปลอดภัยสำหรับSprint Boot 2 Basic + Actuator Securityคุณสมบัติต่อไปนี้สามารถใช้ในไฟล์application.ymlแทนการยกเว้นตามคำอธิบายประกอบ (@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

สำหรับไวยากรณ์application.propertiesจะเป็นเช่นนี้

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

21

สำหรับผู้ใช้สปริงบูต 2 จะต้องมี

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

1
เกิดอะไรขึ้นกับ ManagementWebSecurityAutoConfiguration ใน spring boot 2.0
Viyaan Jhiingade

คุณยังอาจจะต้องแสดงความคิดเห็นของคุณ@EnableWebSecurityบันทึกย่อ
วิคเตอร์ Petit

11

ขั้นตอนที่ 1: คำอธิบายประกอบความคิดเห็น @EnableWebSecurity ในการกำหนดค่าความปลอดภัยของคุณ

//@EnableWebSecurity

ขั้นตอนที่ 2: เพิ่มสิ่งนี้ลงในไฟล์application.propertiesของคุณ

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

ดูรายละเอียดเพิ่มเติมได้ที่นี่: http://codelocation.com/how-to-turn-on-and-off-spring-security-in-spring-boot-application/


5

เพิ่มคลาสต่อไปนี้ลงในโค้ดของคุณ

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

}

และส่วนในของ application.properties เพิ่ม

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

5

หากคุณใช้@WebMvcTestคำอธิบายประกอบในชั้นเรียนทดสอบของคุณ

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

ไม่ได้ช่วยคุณ

คุณสามารถปิดใช้งานความปลอดภัยได้ที่นี่

@WebMvcTest(secure = false)

4

คำตอบคืออนุญาตคำขอทั้งหมดใน WebSecurityConfigurerAdapter ดังต่อไปนี้

คุณสามารถทำได้ในชั้นเรียนที่มีอยู่หรือในชั้นเรียนใหม่

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

โปรดทราบ: ถ้าเธอเป็นคลาส GlobalMethodSecurityConfiguration คุณต้องปิดการใช้งาน


ไม่ทำงาน แต่อันนี้ใช้ได้ผลสำหรับฉันstackoverflow.com/questions/23894010/…
ราวี MCA

สวัสดีคุณ ravi ตามวิธีการแก้ปัญหาของคุณไม่แนะนำให้ปิดการใช้งาน csrf ในเวอร์ชันที่ใช้งานจริงเป็น คุณได้รับปัญหา CSRF สำหรับการโพสต์การโทร ฯลฯ หรือไม่?
U_R_Naveen UR_Naveen

3

อนุญาตให้เข้าถึงทุกอย่างโดยใช้ antMatchers ("/")

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

3

ฉันก็เพิ่มsecurity.ignored=/**ในapplication.propertiesและที่ไม่ได้มีเสน่ห์


นั่นหมายความว่ากลไกการรักษาความปลอดภัยอัตโนมัติยังคงถูกใช้งานอยู่ แต่เป็นเพียงการเพิกเฉยต่อเส้นทางทั้งหมด ฉันคงไม่สบายใจที่จะรักษาสิ่งที่ไม่จำเป็น
Paramvir Singh Karwal

2

เพื่อหลีกเลี่ยงความปลอดภัยคุณสามารถใช้คำอธิบายประกอบ ใช้คำอธิบายประกอบนี้ที่ด้านบนของคลาสกำหนดค่า:

@EnableWebSecurity

ตัวอย่างเช่น:

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

15
เหตุใดจึงควร@EnableWebSecurityปิดใช้งาน Web Security
lilalinux

2

คุณต้องเพิ่มรายการนี้ในapplication.propertiesเพื่อข้ามSpringboot Default Security

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

จากนั้นจะไม่มีกล่องรับรองความถูกต้อง otrws ข้อมูลประจำตัวคือ: - userและ99b962fa-1848-4201-ae67-580bdeae87e9 (สร้างรหัสผ่านแบบสุ่ม)

Note: my springBootVersion = '1.5.14.RELEASE'


หากไม่มีสิ่งนี้ security.basic.enabled = false management.security.enabled = false security.ignored = / ** ไม่เพียงพอเป็นเรื่องปกติหรือไม่?
Bilgehan

2

คุณสามารถกำหนดค่าเพื่อสลับการรักษาความปลอดภัยสปริงในโปรเจ็กต์ของคุณได้โดยทำตาม 2 ขั้นตอนด้านล่าง:

ขั้นตอนที่ 1: เพิ่ม@ConditionalOnPropertyคำอธิบายประกอบที่ด้านบนของคลาส SecurityConfig ของคุณ ดูด้านล่าง:

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

ขั้นตอนที่ 2: เพิ่มการกำหนดค่าต่อไปนี้ในไฟล์application.propertiesหรือapplication.ymlไฟล์ของคุณ

application.properties

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

หรือ

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

สามารถใช้คุณสมบัติเดียวได้หรือไม่?
wakedeer

@wakedeer ความคิดเห็นของคุณดูเหมือนจะเป็นความลับคุณช่วยอธิบายให้ละเอียดได้ไหม
Sahil Chhabra

1

สิ่งเดียวที่เหมาะกับฉัน:

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

และ

security.ignored=/**

อาจเป็นไปได้ว่าส่วนคุณสมบัติซ้ำซ้อนหรือสามารถทำได้ในโค้ด แต่ไม่มีเวลาทดลอง ยังไงก็ได้ชั่วคราว


1

วิธีที่ง่ายที่สุดสำหรับ Spring Boot 2 โดยไม่มีการอ้างอิงหรือการเปลี่ยนแปลงรหัสมีเพียง:

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

2
สิ่งนี้ใช้ไม่ได้กับ Spring Boot v2.2.2 RELEASE
Pra_A

0

เพิ่มบรรทัดด้านล่างลงในแอปหลักของคุณ

ลบ org.activiti.spring.boot.SecurityAutoConfiguration.class ถ้าคุณไม่ได้ใช้ activiti

ในทำนองเดียวกันให้ลบหนึ่งสำหรับแอคชูเอเตอร์หากคุณไม่ได้ใช้สปริงบูต - แอคชูเอเตอร์

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

0

ตามที่ก่อนหน้านี้มีหลายวิธีที่กล่าวถึงเพื่อปิดการรักษาความปลอดภัยผ่านการแสดงความคิดเห็น

@EnableWebSecurity

คำอธิบายประกอบและอื่น ๆ ผ่านคุณสมบัติใน application.properties หรือ yml แต่คุณสมบัติเหล่านั้นแสดงว่าเลิกใช้แล้วในเวอร์ชันสปริงบูตล่าสุด

ดังนั้นฉันต้องการแบ่งปันวิธีการอื่นในการกำหนดค่าชื่อผู้ใช้และรหัสผ่านเริ่มต้นในapplication-dev.propertiesหรือapplication-dev.yml ของคุณและใช้เพื่อล็อกอินเข้าสู่ swagger และอื่น ๆ ในสภาพแวดล้อมการพัฒนา

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

ดังนั้นวิธีนี้จะให้ความปลอดภัยบางอย่างแก่คุณเช่นกันและคุณสามารถแบ่งปันข้อมูลนี้กับทีมพัฒนาของคุณได้ คุณยังสามารถกำหนดค่าบทบาทของผู้ใช้ได้เช่นกัน แต่ไม่จำเป็นต้องใช้ในระดับการพัฒนา


-3

ฉันเพิ่มการตั้งค่าด้านล่างใน application.yml และทำงานได้ดี

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

สิ่งนี้สามารถแปลงเป็นsecurity.route-paterns-to-be-skipped=/**/*สำหรับ application.properties


1
คุณสมบัตินี้ไม่มีอยู่เลย
Drakes
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.