web-dev-qa-db-ja.com

Spring Boot 2.0.xは特定のプロファイルのセキュリティを無効にします

Spring Boot 1.5.xでは、セキュリティを構成しており、特定のプロファイル(ローカルなど)で.propertiesファイルにsecurity.basic.enabled=false行を追加して、そのプロファイルのすべてのセキュリティを無効にしています。その構成プロパティが削除された新しいSpring Boot 2に移行しようとしています。 Spring Boot 2.0.xで同じ動作を(このプロパティを使用せずに)達成するにはどうすればよいですか?

私はすでに Spring-Boot-Security-2.security-changes-in-spring-boot-2-0-m4 を読んでおり、このプロパティに関しては何もありません。

10
leonz

カスタムSpring Security構成を追加する必要があります。 Spring Boot Reference Guide を参照してください。

28.1 MVCセキュリティ

デフォルトのセキュリティ設定は、SecurityAutoConfigurationおよびUserDetailsServiceAutoConfigurationに実装されています。 SecurityAutoConfigurationはWebセキュリティのためにSpringBootWebSecurityConfigurationをインポートし、UserDetailsServiceAutoConfigurationはWeb以外のアプリケーションにも関連する認証を設定します。デフォルトのWebアプリケーションセキュリティ設定を完全にオフにするには、タイプWebSecurityConfigurerAdapterのBeanを追加できます(これにより、UserDetailsService設定またはアクチュエータのセキュリティが無効になりません)。

例えば:

@Configuration
public class ApplicationSecurity extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web
           .ignoring()
               .antMatchers("/**");
    }
}

プロファイルにのみ構成を使用するには、 @Profile クラスに。プロパティで有効にする場合は、クラスに ConditionalOnProperty を追加します。

13
dur

これが私が問題を解決する方法です。 Spring Boot 1.5.xでのセキュリティ設定の例を次に示します。プロパティsecurity.basic.enabled=falseでセキュリティが無効になりました:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/upload/**");
    }

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

security.basic.enabledはSpring Boot 2で削除されたため(ただし、プロパティ名として予約されていました)、security.enabledをカスタムプロパティとして使用することになりました。 Spring Boot 2での私の設定の例を次に示します。

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${security.enabled:true}")
    private boolean securityEnabled;

    @Override
    public void configure(WebSecurity web) throws Exception {
        if (securityEnabled)
            web.ignoring().antMatchers("/upload/**");
        else
            web.ignoring().antMatchers("/**");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        if (securityEnabled)
            http.csrf().disable().authorizeRequests()
                    .anyRequest().authenticated()
                    .and().httpBasic();
    }
}
5
leonz

Spring Boot 2でセキュリティを無効にする別のオプションがあります

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})

これをメインクラスに追加します

3

実際、この質問の特定の構成にはいくつかの答えがあります。私の場合、Spring SecurityとJWTでSpring Boot 2をいじっていました。 RESTエンドポイントを保護するために、トークンなどを作成する必要があります。コードを作成し、エンドポイントをテストしてJWTが正常に動作するかどうかを確認した後、デフォルトのログインページが表示されます。上記のプロパティファイルを変更してみました。最後に、アプリケーションクラスに@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )アノテーションを追加して無効にしました。

@SpringBootApplication(exclude = {SecurityAutoConfiguration.class} )
public class JwtWithSpringBootApplication {

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

春のブート2.1.4で私はこれをしなければなりませんでした

@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class, SecurityFilterAutoConfiguration.class})
0
Kalpesh Soni

Spring Boot 2.1.3

特定のプロファイル「dev」の場合

新しいSpring Configurationクラスを作成します

@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable  {

}

これにより、スプリングセキュリティが無効になります。

0
Madhu Tomy