Spring boot Security Tắt bảo mật


93

Khi tôi sử dụng security.basic.enabled = false để tắt bảo mật trên một dự án Spring Boot có các phần phụ thuộc sau:

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

Tôi thấy Ngoại lệ sau :

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

Để khắc phục ngoại lệ này, tôi phải thêm thuộc tính - management.security.enabled = false . Sự hiểu biết của tôi là khi bộ truyền động ở trong classpath, cả security.basic.enabled = falsemanagement.security.enabled = false phải được đặt để vô hiệu hóa bảo mật.

Ai đó có thể vui lòng cho tôi biết nếu sự hiểu biết của tôi là sai?


1
Tại sao bạn cần bảo mật trên classpath của mình nếu bạn chỉ muốn vô hiệu hóa mọi thứ? Dù sao, dấu vết ngăn xếp của bạn chưa hoàn thành nên không có cách nào để biết điều gì đã ngăn ứng dụng khởi động. Tôi hy vọng nó sẽ bắt đầu, nhưng các điểm cuối của bộ truyền động sẽ giữ an toàn cho đến khi bạn mở chúng một cách rõ ràng.
Dave Syer

@DaveSyer Tôi muốn tạm thời vô hiệu hóa bảo mật và mã ứng dụng của tôi cũng đề cập đến các lọ bảo mật hoạt động.
Stackee007

Bạn vẫn chưa đăng đủ thông tin để biết lý do tại sao ứng dụng không khởi động. Một dấu vết ngăn xếp đầy đủ sẽ là một khởi đầu.
Dave Syer

2
@DaveSyer Một lý do sẽ là một microservice quản lý spring-sec-oauth2 ClientDetails. Bạn sẽ có một quá trình nhập mã bảo mật mùa xuân nhưng có thể không muốn xác thực cơ bản trong dịch vụ của mình.
Dirk Lachowski

Câu trả lời:


79

Điều có vẻ cũng hoạt động tốt là tạo một tệp application-dev.propertiescó chứa:

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

Nếu sau đó bạn khởi động ứng dụng Spring Boot với devhồ sơ, bạn không cần đăng nhập.


1
security.basic.enabled = false là không cần thiết nếu bạn vô hiệu hóa an ninh với management.security.enabled = false
hennr

Tôi cũng đã thêm security.ignored=/**sau đó làm việc. stackoverflow.com/a/36280413/3291867
mojtab23

11
Tính năng này hiện không được dùng nữa!
Eagle_Eye

6
Thật. Xem spring.io/blog/2017/09/15/... để biết thêm về việc không dùng đã xảy ra trong mùa xuân Boot 2
Wim Deblauwe

72

Trong trường hợp bạn có bộ truyền động khởi động lò xo trong gói của mình, bạn nên thêm những thứ sau

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

Với Spring-boot cũ hơn, lớp đã được gọi ManagementSecurityAutoConfiguration.

Trong các phiên bản mới hơn, điều này đã thay đổi thành

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

39

Nếu bạn cần bảo mật làm phụ thuộc nhưng không muốn Spring Boot định cấu hình nó cho bạn, bạn có thể sử dụng loại trừ này:

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

23

Đối với Spring Boot 2, các thuộc tính sau không được chấp nhận trong cấu hình application.yml

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

Để tắt bảo mật cho Sprint Boot 2 Basic + Actuator Security, các thuộc tính sau có thể được sử dụng trong tệp application.yml thay vì loại trừ dựa trên chú thích (@EnableAutoConfiguration (lude = {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

Đối với cú pháp application.properties sẽ như thế nào

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

21

Đối với người dùng khởi động mùa xuân 2, nó phải

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

1
Gì đã xảy ra với ManagementWebSecurityAutoConfiguration trong khởi động mùa xuân 2,0
Viyaan Jhiingade

Bạn vẫn có thể phải nhận xét @EnableWebSecuritychú thích của mình
Victor Petit


5

Thêm lớp sau vào mã của bạn

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

}

Và insie of application.properties thêm

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

5

Nếu bạn đang sử dụng @WebMvcTestchú thích trong lớp thử nghiệm của mình

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

không giúp bạn.

Bạn có thể tắt bảo mật tại đây

@WebMvcTest(secure = false)

4

Trả lời là cho phép tất cả các yêu cầu trong WebSecurityConfigurerAdapter như bên dưới.

bạn có thể làm điều này trong lớp hiện có hoặc trong lớp mới.

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

Xin lưu ý: Nếu hiện có lớp GlobalMethodSecurityConfiguration, bạn phải vô hiệu hóa nó.


Không hoạt động. Nhưng cái này đã làm việc cho tôi stackoverflow.com/questions/23894010/…
Ravi MCA

Xin chào ravi, theo giải pháp của bạn, bạn không nên tắt csrf trong sản xuất là "http.csrf.disable ()". bạn có gặp sự cố CSRF cho các cuộc gọi POST, v.v. không?
U_R_Naveen UR_Naveen

3

Cho phép truy cập mọi thứ bằng antMatchers ("/")

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

3

Tôi chỉ đơn giản là thêm security.ignored=/**vào application.properties, và điều đó đã làm nên sự quyến rũ.


Vì vậy, điều đó có nghĩa là cơ chế bảo mật tự động vẫn được áp dụng nhưng đang bỏ qua tất cả các con đường. Tôi sẽ không được thoải mái trong việc giữ những điều không cần thiết
Paramvir Singh Karwal

2

Để tránh bảo mật, bạn có thể sử dụng chú thích. Sử dụng chú thích này ở đầu lớp cấu hình:

@EnableWebSecurity

Ví dụ:

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

15
Tại sao nên @EnableWebSecuritytắt Bảo mật Web?
lilalinux.

2

Bạn cần thêm mục nhập này vào application.properties để vượt qua Springboot Default Security

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

Sau đó, sẽ không có bất kỳ hộp xác thực nào. otrws, thông tin đăng nhập là: - user99b962fa-1848-4201-ae67-580bdeae87e9 (mật khẩu được tạo ngẫu nhiên)

Note: my springBootVersion = '1.5.14.RELEASE'


nếu không có cái này thì security.basic.enabled = false management.security.enabled = false security.ignored = / ** là không đủ có bình thường không?
Bilgehan

2

Bạn có thể định cấu hình để bật tắt bảo mật mùa xuân trong dự án của mình bằng cách làm theo 2 bước dưới đây:

BƯỚC 1: Thêm @ConditionalOnPropertychú thích vào đầu lớp SecurityConfig của bạn. Tham khảo bên dưới:

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

BƯỚC 2: Thêm cấu hình sau vào tệp application.propertieshoặc của bạn application.yml.

application.properties

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

HOẶC LÀ

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

Có thể chỉ sử dụng một tài sản không?
wakedeer

@wakedeer nhận xét của bạn có vẻ khó hiểu, bạn có thể vui lòng giải thích thêm không?
Sahil Chhabra

1

Điều duy nhất phù hợp với tôi:

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

security.ignored=/**

Có thể phần thuộc tính là dư thừa hoặc có thể được thực hiện bằng mã, nhưng không có thời gian để thử nghiệm. Dù sao cũng là tạm thời.


1

Cách dễ nhất để Spring Boot 2 mà không cần phụ thuộc hoặc thay đổi mã chỉ là:

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

2
Điều này không hoạt động với Spring Boot v2.2.2.RELEASE
Pra_A

0

Thêm các dòng dưới đây vào ứng dụng chính của bạn.

Xóa org.activiti.spring.boot.SecurityAutoConfiguration.class nếu bạn không sử dụng activityti.

Tương tự, hãy tháo bộ truyền động cho bộ truyền động nếu bạn không sử dụng bộ truyền động khởi động lò xo.

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

0

Như trước đây, nhiều giải pháp đã đề cập để vô hiệu hóa bảo mật thông qua nhận xét về

@EnableWebSecurity

chú thích và khác là thông qua các thuộc tính trong application.properties hoặc yml. Nhưng những thuộc tính đó đang hiển thị là không được dùng nữa trong phiên bản khởi động mùa xuân mới nhất.

Vì vậy, tôi muốn chia sẻ một cách tiếp cận khác để định cấu hình tên người dùng và mật khẩu mặc định trong application-dev.properties hoặc application-dev.yml của bạn và sử dụng chúng để đăng nhập vào swagger và v.v. trong môi trường phát triển.

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

Vì vậy, cách tiếp cận này cũng sẽ cung cấp cho bạn một số loại bảo mật và bạn có thể chia sẻ thông tin này với nhóm phát triển của mình. Bạn cũng có thể định cấu hình vai trò người dùng, nhưng nó không bắt buộc ở cấp độ phát triển.


-3

Tôi đã thêm cài đặt bên dưới trong application.yml và hoạt động tốt.

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

điều này có thể được chuyển đổi như security.route-paterns-to-be-skipped=/**/*cho application.properties


1
Thuộc tính này hoàn toàn không tồn tại.
Hòa vào
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.