web-dev-qa-db-ja.com

Spring Security Java configurationの使用中に基本認証を無効にする

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

ありがとう

13
Kumar Sambhav

まず、super.configure(http);を呼び出すと、それ以前の設定全体がオーバーライドされます。

代わりにこれを試してください:

http
    .authorizeRequests()
        .anyRequest().authenticated()
        .and()
    .formLogin()
        .and()
    .httpBasic().disable();
19
kazuar

Spring Bootを使用する場合、 documentation 状態:

Webアプリケーションでブートのデフォルト設定を完全にオフにするには、@ EnableWebSecurityでBeanを追加できます

そのため、自分自身を完全にカスタマイズする場合は、オプションになる可能性があります。

明確にするために...メインアプリケーションクラスまたはアプリケーション構成クラスに@EnableWebSecurityアノテーションを配置するだけです。

6
Marcel Overdijk

次のように、HttpSecurityインスタンスを介してformLoginを無効にできます。

http.authorizeRequests().antMatchers("/public/**").permitAll()
        .antMatchers("/api/**").hasRole("USER")
        .anyRequest().authenticated() 
        .and().formLogin().disable();

これにより、保護されたリソースにアクセスしようとすると403 Httpエラーが発生します。

4
Moustafa Essa

匿名オプションは私のために働いた。私のコードのような

  http.csrf().disable().headers().frameOptions().sameOrigin().and().
   authorizeRequests().anyRequest().anonymous().and().httpBasic().disable();
3
vara