Spring Security Java configuration。を使用してWebアプリケーションを保護しようとしています。
これは構成がどのように見えるかです:
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
private String googleClientSecret;
@Autowired
private CustomUserService customUserService;
/*
* (non-Javadoc)
*
* @see org.springframework.security.config.annotation.web.configuration.
* WebSecurityConfigurerAdapter
* #configure(org.springframework.security.config
* .annotation.web.builders.HttpSecurity)
*/
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers(HttpMethod.GET, "/","/static/**", "/resources/**","/resources/public/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable()
.requiresChannel().anyRequest().requiresSecure();
// @formatter:on
super.configure(http);
}
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
// @formatter:off
auth
.eraseCredentials(true)
.userDetailsService(customUserService);
// @formatter:on
super.configure(auth);
}
}
以下を使用してHTTP基本認証を明示的に無効にしていることに注意してください。
.httpBasic().disable()
セキュリティで保護されたURLにアクセスしているときに、HTTP認証プロンプトボックスが引き続き表示されます。どうして?
これを修正するのを手伝ってください。バンドルされているデフォルトのログインフォームをレンダリングしたいだけです。
Spring Boot Starterバージョン:1.1.5 Spring Securityバージョン:3.2.5
ありがとう
まず、super.configure(http);
を呼び出すと、それ以前の設定全体がオーバーライドされます。
代わりにこれを試してください:
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin()
.and()
.httpBasic().disable();
Spring Bootを使用する場合、 documentation 状態:
Webアプリケーションでブートのデフォルト設定を完全にオフにするには、@ EnableWebSecurityでBeanを追加できます
そのため、自分自身を完全にカスタマイズする場合は、オプションになる可能性があります。
明確にするために...メインアプリケーションクラスまたはアプリケーション構成クラスに@EnableWebSecurityアノテーションを配置するだけです。
次のように、HttpSecurityインスタンスを介してformLoginを無効にできます。
http.authorizeRequests().antMatchers("/public/**").permitAll()
.antMatchers("/api/**").hasRole("USER")
.anyRequest().authenticated()
.and().formLogin().disable();
これにより、保護されたリソースにアクセスしようとすると403 Httpエラーが発生します。
匿名オプションは私のために働いた。私のコードのような
http.csrf().disable().headers().frameOptions().sameOrigin().and().
authorizeRequests().anyRequest().anonymous().and().httpBasic().disable();