복붙노트

[SPRING] 봄 부팅 응용 프로그램에서 봄 보안 해제

SPRING

봄 부팅 응용 프로그램에서 봄 보안 해제

스프링 보안이 구성된 스프링 부트 웹 앱이 있습니다. 나는 잠시 동안 (필요할 때까지) 인증을 해제하고 싶다.

application.properties에 다음을 추가합니다.

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

여기에 내 일부분이있다.

하지만 여전히 기본 보안이 포함되어 있습니다. 시작시 생성되는 기본 보안 암호가 있으며 여전히 HTTP 인증 프롬프트 상자가 표시됩니다.

우리는 : hml :

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>fr.test.sample</groupId>
    <artifactId>navigo</artifactId>
    <version>1.0.0-SNAPSHOT</version>

    <!-- Inherit defaults from Spring Boot -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.3.1.RELEASE</version>
    </parent>

    <properties>
        <java.version>1.7</java.version>
        <jsoup.version>1.8.3</jsoup.version>
        <guava.version>18.0</guava.version>
        <postgresql.version>9.3-1103-jdbc41</postgresql.version>
    </properties>

    <!-- Add typical dependencies for a web application -->
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-mail</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.jsoup</groupId>
            <artifactId>jsoup</artifactId>
            <version>${jsoup.version}</version>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            </dependency>
    </dependencies>

    <!-- Package as an executable jar -->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <!-- Add Spring repositories -->
    <!-- (you don't need this if you are using a .RELEASE version) -->
    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
        <repository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-snapshots</id>
            <url>http://repo.spring.io/snapshot</url>
        </pluginRepository>
        <pluginRepository>
            <id>spring-milestones</id>
            <url>http://repo.spring.io/milestone</url>
        </pluginRepository>
    </pluginRepositories>

</project>

보안은 WebSecurityConfig.java에서 구성됩니다 (주석을 해제하여 주석을 해제했습니다).

//@Configuration
//@EnableWebSecurity
//@EnableGlobalMethodSecurity(prePostEnabled = true)
//@Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    UserDetailsService userDetailsService;

    @Autowired
    UserService userService;

    @Autowired
    private DataSource datasource;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // http.authorizeRequests().antMatchers("/bus/topologie", "/home")
        // http.authorizeRequests().anyRequest().authenticated()
        // .antMatchers("/admin/**").access("hasRole('ADMIN')").and()
        // .formLogin().failureUrl("/login?error")
        // .defaultSuccessUrl("/bus/topologie").loginPage("/login")
        // .permitAll().and().logout()
        // .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
        // .logoutSuccessUrl("/login").permitAll().and().rememberMe()
        // .rememberMeParameter("remember-me")
        // .tokenRepository(persistentTokenRepository())
        // .tokenValiditySeconds(86400).and().csrf();
    }

    @Bean
    public PersistentTokenRepository persistentTokenRepository() {
        JdbcTokenRepositoryImpl tokenRepositoryImpl = new JdbcTokenRepositoryImpl();
        tokenRepositoryImpl.setDataSource(datasource);
        return tokenRepositoryImpl;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {

        PasswordEncoder encoder = new BCryptPasswordEncoder();

        auth.userDetailsService(userDetailsService).passwordEncoder(encoder);
        auth.jdbcAuthentication().dataSource(datasource);

        if (!userService.userExists("user")) {
            User userAdmin = new User("user", encoder.encode("password"), true);
            Set<Authorities> authorities = new HashSet<Authorities>();
            authorities.add(new Authorities(userAdmin,"ADMIN"));
            authorities.add(new Authorities(userAdmin,"CRIP"));
            authorities.add(new Authorities(userAdmin,"USER"));
            userAdmin.setAuthorities(authorities);

            userService.createUser(userAdmin);
        }
    }

}

해결법

  1. ==============================

    1.security.ignored 속성을 사용하십시오.

    security.ignored 속성을 사용하십시오.

    security.ignored=/**
    

    security.basic.enable : false로 설정하면 보안 자동 구성의 일부만 비활성화되지만 WebSecurityConfig는 계속 등록됩니다.

    AuthenticationManagerBuilder를 Autowired하려고 시도하십시오.

    @Override
    @Autowired
    protected void configure(AuthenticationManagerBuilder auth) throws Exception { ... }
    
  2. ==============================

    2.이 시도. 새로운 수업 만들기

    이 시도. 새로운 수업 만들기

    @Configuration
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity httpSecurity) throws Exception {
            httpSecurity.authorizeRequests().antMatchers("/").permitAll();
    }
    
    }
    

    기본적으로 이것은 모든 URL에 대한 액세스를 허용하도록 Spring에 지시합니다. @Configuration은 봄에 설정 클래스라고 알려줍니다.

  3. ==============================

    3.@SpringBootApplication 주석이 달린 클래스에서 보안 자동 구성을 제거해야한다고 생각합니다.

    @SpringBootApplication 주석이 달린 클래스에서 보안 자동 구성을 제거해야한다고 생각합니다.

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

    4.WebSecurityConfigurerAdapter를 확장하는 보안 구성 클래스에서 @profile ( "what-name-profile-to-activate-to-if-needed")을 사용하십시오.

    WebSecurityConfigurerAdapter를 확장하는 보안 구성 클래스에서 @profile ( "what-name-profile-to-activate-to-if-needed")을 사용하십시오.

    security.ignored=/**
    
    security.basic.enable: false
    

    NB. 왜 자동 구성을 제외시켜야 나에게 도움이되지 않는지를 알기 위해 디버깅을해야합니다. 그러나 프로필은 필요하면 구성 속성을 통해 다시 활성화 할 수 있으므로 너무 나쁩니다.

  5. ==============================

    5.이것은 나를 위해 유일하게 효과가있는 응용 프로그램 클래스에 다음 주석을 추가하고 SecurityAutoConfiguration을 제외했습니다.

    이것은 나를 위해 유일하게 효과가있는 응용 프로그램 클래스에 다음 주석을 추가하고 SecurityAutoConfiguration을 제외했습니다.

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

    6.이 솔루션을 사용하면 명령 줄을 사용하여 특정 프로파일을 활성화하여 보안을 완전히 활성화 / 비활성화 할 수 있습니다. 파일 응용 프로그램 -nosecurity.yaml에 프로필을 정의했습니다.

    이 솔루션을 사용하면 명령 줄을 사용하여 특정 프로파일을 활성화하여 보안을 완전히 활성화 / 비활성화 할 수 있습니다. 파일 응용 프로그램 -nosecurity.yaml에 프로필을 정의했습니다.

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

    그런 다음 다음과 같이 @Profile ( "! nosecurity")을 추가하여 사용자 정의 WebSecurityConfigurerAdapter를 수정했습니다.

    @Configuration
    @EnableWebSecurity
    @EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
    @Profile("!nosecurity")
    public class WebSecurityConfig extends WebSecurityConfigurerAdapter {...}
    

    보안을 완전히 비활성화하려면 보안 위협 프로필을 지정하여 응용 프로그램을 시작할 수 있습니다.

    java -jar  target/myApp.jar --spring.profiles.active=nosecurity
    
  7. ==============================

    7.잠시 동안 maven 종속성을 주석 처리 할 수 ​​있습니다.

    잠시 동안 maven 종속성을 주석 처리 할 수 ​​있습니다.

    <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-mongodb</artifactId>
            </dependency>
    <!--        <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-security</artifactId>
            </dependency>-->
    </dependencies>
    

    나에게 잘 돌아갔다.

  8. ==============================

    8.security.ignored는 Spring Boot 2 이후 사용되지 않습니다.

    security.ignored는 Spring Boot 2 이후 사용되지 않습니다.

    나를 위해 간단하게 응용 프로그램 클래스의 주석 확장 트릭 않았다 :

    @SpringBootApplication(exclude = SecurityAutoConfiguration.class)
    
  9. ==============================

    9.security.disable 옵션은 사용법에서 금지되어 있기 때문에 Boot를 사용하면 클래스 비행을하지 않고도 순수한 설정에서 환경을 얻을 수 있습니다 (환경 조작으로 편리함을 만들고 ENV 변수로 활성화 할 수 있음).

    security.disable 옵션은 사용법에서 금지되어 있기 때문에 Boot를 사용하면 클래스 비행을하지 않고도 순수한 설정에서 환경을 얻을 수 있습니다 (환경 조작으로 편리함을 만들고 ENV 변수로 활성화 할 수 있음).

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

    10.application.properties 파일에서 스프링 자동 구성을 사용하지 않으려면 다음 행을 추가하기 만하면됩니다.

    application.properties 파일에서 스프링 자동 구성을 사용하지 않으려면 다음 행을 추가하기 만하면됩니다.

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

    그것은 봄 2.0.5에서 작동 :)

  11. from https://stackoverflow.com/questions/36280181/disabling-spring-security-in-spring-boot-app by cc-by-sa and MIT license