스프링 부트 보안 보안 비활성화


92

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 속성을 추가해야했습니다 . 내 이해는 액추에이터가 클래스 경로에있을 때 security.basic.enabled = falsemanagement.security.enabled = false 모두 보안 을 비활성화하도록 설정해야한다는 것입니다.

내 이해가 잘못된 경우 누군가 알려주시겠습니까?


1
모든 것을 비활성화하려면 클래스 경로에 보안이 필요한 이유는 무엇입니까? 어쨌든 스택 추적이 불완전하므로 앱 시작을 방해하는 원인을 알 수있는 방법이 없습니다. 시작될 것으로 예상하지만 액추에이터 끝점은 명시 적으로 열 때까지 안전하게 유지되어야합니다.
Dave Syer 2014 년

@DaveSyer 보안을 일시적으로 비활성화하고 싶습니다. 또한 내 응용 프로그램 코드는 보안 항아리가 작동하도록 참조합니다.
Stackee007

앱이 시작되지 않는 이유를 확인할 수있는 충분한 정보를 아직 게시하지 않았습니다. 전체 스택 추적이 시작됩니다.
Dave Syer

2
@DaveSyer 한 가지 이유는 spring-sec-oauth2를 관리하는 마이크로 서비스 ClientDetails입니다. 스프링 보안을 전 이적으로 가져 오지만 서비스에서 기본 인증을 원하지 않을 수도 있습니다.
Dirk Lachowski 2015 년

답변:


79

잘 작동하는 것처럼 보이는 것은 다음을 application-dev.properties포함 하는 파일 을 만드는 것 입니다.

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

그런 다음 dev프로필을 사용하여 Spring Boot 앱을 시작 하면 로그온 할 필요가 없습니다.


1
management.security.enabled = false로 보안을 비활성화 한 경우 security.basic.enabled = false는 필요하지 않습니다.
hennr

나는 또한 추가 security.ignored=/**했다. stackoverflow.com/a/36280413/3291867
mojtab23 2017

10
이제 더 이상 사용되지 않습니다!
Eagle_Eye

6
과연. 참조 spring.io/blog/2017/09/15/...을 봄 부팅에 2 일어난 중단에 대한 추가 정보를 원하시면
빔 Deblauwe을

72

패키지에 spring-boot-actuator가있는 경우 다음을 추가해야합니다.

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

이전 Spring-boot에서는 클래스가 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 
    })

21

스프링 부트 2 사용자의 경우

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

1
봄 부팅 2.0 ManagementWebSecurityAutoConfiguration에 무슨 일
Viyaan Jhiingade

@EnableWebSecurity주석 을 달아야 할 수도 있습니다.
Victor Petit

21

들어 봄 부팅이 개 다음과 같은 속성에 사용되지 않습니다 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


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의 insie는

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/…
Ravi MCA

솔루션에 따라 "http.csrf.disable ()"로 프로덕션 환경에서 csrf를 비활성화하지 않는 것이 좋습니다. POST 등의 호출에 대해 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 싱 Karwal을

2

보안을 피하기 위해 주석을 사용할 수 있습니다. 구성 클래스 위에이 주석을 사용하십시오.

@EnableWebSecurity

예를 들면 :

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

15
@EnableWebSecurity웹 보안을 비활성화 해야하는 이유는 무엇 입니까?
lilalinux

2

Springboot 기본 보안 을 우회 하려면이 항목을 application.properties 에 추가해야합니다.

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

아래 두 단계에 따라 프로젝트에서 스프링 보안을 전환하도록 구성 할 수 있습니다 .

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

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

1
이것은 Spring Boot v2.2.2.RELEASE
Pra_A

0

기본 앱에 아래 줄을 추가하십시오.

activiti를 사용하지 않는 경우 org.activiti.spring.boot.SecurityAutoConfiguration.class를 제거하십시오.

마찬가지로 spring-boot-actuator를 사용하지 않는 경우 액추에이터를 제거하십시오.

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