source

스프링 부트 보안 비활성화

ittop 2023. 3. 8. 21:50
반응형

스프링 부트 보안 비활성화

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를 모두 설정해야 합니다.

혹시 제가 잘못 이해한 부분이 있으면 알려주실 수 있나요?

패키지에 spring-boot-actuator가 포함되어 있는 경우 다음 항목을 추가해야 합니다.

@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}
        )

갱신하다

리액티브한 애플리케이션의 경우는, 다음의 클래스를 제외할 수 있습니다.

@SpringBootApplication(exclude = {ReactiveSecurityAutoConfiguration.class, ReactiveManagementWebSecurityAutoConfiguration.class })

, 은, 「 」 「 」 「 」 「 」 「 」 「 」 「 」 「 」를 작성하는 것입니다.application-dev.properties다음을 포함합니다.

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

후 Spring 을 "Spring Boot"로 dev프로파일은 로그온할 필요가 없습니다.

Spring Boot 2의 경우 application.yml 구성에서는 다음 속성이 사용되지 않습니다.

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

Sprint Boot 2 Basic + Actuator Security 보안을 비활성화하려면 주석 기반 제외 대신 application.yml 파일에서 다음 속성을 사용할 수 있습니다(@Enable).자동 구성(= {보안 제외)AutoConfiguration.class, Management Web SecurityAutoConfiguration.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

의존관계로서 시큐러티가 필요하지만, Spring Boot로 시큐러티가 설정되는 것을 원하지 않는 경우는, 다음의 제외를 사용할 수 있습니다.

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

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

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

스텝 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/ 를 참조해 주세요.

코드에 다음 클래스 추가

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

답변은 다음과 같이 Web Security Configurer Adapter의 모든 요청을 허용하는 것입니다.

기존 수업이나 새 수업에서 이 작업을 수행할 수 있습니다.

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

주의: GlobalMethodSecurityConfiguration 클래스가 존재하는 경우 비활성화해야 합니다.

「 」를 사용하고 @WebMvcTest

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

도움이 안 돼요

여기서 보안을 해제할 수 있습니다.

@WebMvcTest(secure = false)

antMatchers("/")를 사용하여 모든 항목에 대한 액세스 허용

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

Spring Boot 2에서 의존관계나 코드를 변경하지 않는 가장 쉬운 방법은 다음과 같습니다.

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

덧붙였습니다.security.ignored=/** application.properties그리고 그게 매력적이죠

나한테 효과가 있었던 건

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

그리고.

security.ignored=/**

속성 부분이 중복되거나 코드로 수행될 수 있지만 실험할 시간이 없었을 수 있습니다.어쨌든 일시적이야.

Springboot Default Security를 바이패스하려면 이 엔트리를 application.properties에 추가해야 합니다.

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

그러면 인증 상자가 없습니다. 자격 증명은 다음과 같습니다.user ★★★★★★★★★★★★★★★★★」99b962fa-1848-4201-ae67-580bdeae87e9 으로 생성됩니다 (비밀번호는 랜덤으로 생성됩니다)

Note: my springBootVersion = '1.5.14.RELEASE'

다음 2단계를 수행하여 프로젝트에서 스프링 보안을 전환하도록 설정할 수 있습니다.

순서 1: 추가@ConditionalOnProperty[ Security Config ]는, 「Security Config」를 참조해 주세요.이하를 참조해 주세요.

@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.ymlfilename을 클릭합니다.

application.properties

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

또는

application.yml

security:
  ignored: /**

myproject:
  security:
    enabled: false

보안을 피하기 위해 주석을 사용할 수 있습니다.구성 클래스의 맨 위에 다음 주석을 사용합니다.

@EnableWebSecurity

예를 들어 다음과 같습니다.

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

앞서 설명한 바와 같이 코멘트를 통해 보안을 해제하는 여러 솔루션에서

@Enable Web Security

주석 및 기타는 application.properties 또는 yml의 속성을 통해 이루어집니다.그러나 이러한 속성은 최신 스프링 부트 버전에서 사용되지 않는 것으로 표시됩니다.

따라서 어플리케이션 dev.properties 또는 application-dev.yml에서 기본 사용자 이름과 비밀번호를 설정하고 이를 사용하여 개발 환경에서 swagger 로그인 등에 사용할 수 있는 다른 접근 방식을 공유하고자 합니다.

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

이 접근방식은 보안도 제공합니다.또한 이 정보를 개발팀과 공유할 수 있습니다.사용자 역할도 구성할 수 있지만 개발 수준에서는 필요하지 않습니다.

당신의 메인 앱에 다음 행을 추가하세요.

org.activiti.spring.boot를 삭제합니다.보안.activiti를 사용하지 않는 경우 AutoConfiguration.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 })

및4에서는 이 설정을 Gradle v2.4에 추가하여 할 수 .4에서는 이 구성을 에 추가하여 스프링 보안을 완전히 배제할 수 있습니다.build.gradle

configurations.all {
    exclude group:"org.springframework.boot", module: "spring-boot-starter-security"
}

Spring Boot 2.7.3을 2.7@EnableAutoConfiguration(exclude = {})에러를 생성했습니다.exclude에서 사용되는 속성@SpringBootApplication주석입니다.

Spring Security를 완전히 비활성화했을 때 도움이 된 것은 다음과 같습니다.

@SpringBootApplication(
        exclude = {
                SecurityAutoConfiguration.class,
                ManagementWebSecurityAutoConfiguration.class
        })
public class GeoServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(GeoServiceApplication.class, args);
    }

}

제외하려고 했는데SecurityAutoConfiguration.class에러가 발생했습니다.HttpSecurity정의되는 콩ManagementWebSecurityAutoConfiguration.class.

Spring 2.6.0에서는 이것이 도움이 되었습니다.

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

또한 pom.xml의 의존관계를 삭제해야 했습니다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

스프링 보안 5.7.0-M2WebSecurityConfigurerAdapter더 이상 사용되지 않습니다.Spring Security 팀은 사용자에게 컴포넌트 기반의 보안 구성으로 이행할 것을 권장합니다.

package com.may.security;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/**").permitAll(); // config to permit all requests
        return http.build();
    }

    @Bean
    public AuthenticationManager authenticationManager() { // to delete default username and password that is printed in the log every time, you can provide here any auth manager (InMemoryAuthenticationManager, etc) as you need
        return authentication -> {
            throw new UnsupportedOperationException();
        };
    }
}

기타 예는 다음과 같습니다.

https://spring.io/blog/2022/02/21/spring-security-without-the-websecurityconfigureradapter

최신 봄 2.7.x에서 두 개의 클래스를 만들고 보안 활성화/비활성화를 위해 응용 프로그램 프로파일에서 DISABLE_KEYLOAK_AUDIT_PROPERTY = 'your key'를 설정합니다.

    public static final String DISABLE_KEYCLOAK_AUDIT_PROPERTY = "enable_security";
    @EnableAutoConfiguration(exclude =
            {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class,
                    org.springframework.boot.actuate.autoconfigure.security.servlet.ManagementWebSecurityAutoConfiguration.class
            })
    @Configuration
    @ConditionalOnProperty(name = DISABLE_KEYCLOAK_AUDIT_PROPERTY, havingValue = "true")
    static
    class DisableSecurityConfig {
    }

    @Configuration
    @ConditionalOnProperty(name = DISABLE_KEYCLOAK_AUDIT_PROPERTY, havingValue = "false")
    @Import({KeycloakSecurityConfig.class, KeycloakConfig.class})
    static
    class EnableSecurityConfig {
    }

예를 들어 application.yml에서 사용합니다.

enable_security: true

application.yml에 아래 설정을 추가하여 정상적으로 동작하였습니다.

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

이것은 로 변환할 수 있다.security.route-paterns-to-be-skipped=/**/*application.properties의 경우

언급URL : https://stackoverflow.com/questions/23894010/spring-boot-security-disable-security

반응형