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 を読んでおり、このプロパティに関しては何もありません。
カスタム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
を追加します。
これが私が問題を解決する方法です。 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();
}
}
Spring Boot 2でセキュリティを無効にする別のオプションがあります
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
これをメインクラスに追加します
実際、この質問の特定の構成にはいくつかの答えがあります。私の場合、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})
Spring Boot 2.1.3
特定のプロファイル「dev」の場合
新しいSpring Configurationクラスを作成します
@Configuration
@EnableAutoConfiguration(exclude = {SecurityAutoConfiguration.class})
@Profile("dev")
public class WebSecurityConfigDisable {
}
これにより、スプリングセキュリティが無効になります。