使用Spring Security Java配置时禁用基本身份验证

时间:2014-09-03 08:00:05

标签: spring-security spring-boot spring-java-config

我正在尝试使用Spring Security java配置来保护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()

我在访问安全网址时仍然会收到HTTP Authenticaton提示框。为什么呢?

请帮我解决这个问题。 我只想渲染捆绑的默认登录表单。

Spring Boot Starter版本:1.1.5 Spring Security版本:3.2.5

由于

6 个答案:

答案 0 :(得分:19)

首先,调用super.configure(http);将覆盖您之前的整个配置。

请改为尝试:

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

答案 1 :(得分:6)

如果你使用Spring Boot,documentation状态:

  

完全在Web中关闭引导默认配置   您可以使用@EnableWebSecurity

添加一个bean

因此,如果您想完全自定义可能是一个选项。

只是为了说清楚......你只需要在主应用程序类或应用程序配置类上放置@EnableWebSecurity注释。

答案 2 :(得分:4)

您可以通过HttpSecurity实例禁用formLogin,如下所示:

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

这将导致在尝试访问任何安全资源时收到403 Http错误

答案 3 :(得分:2)

匿名选项对我有用。我的代码就像

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

答案 4 :(得分:0)

适用于Spring Boot或使用OAuth的人

input {
  border: 4px solid #e3e3e3;
  padding:10px;
  width:100%;
}
.container {
  width:50%;
  margin: auto;
  position:relative;
}
.suggested {
  position:absolute;
  top:25px;
  left:25px;
  color:#e3e3e3;
  z-index:-1;
}

如果使用@ EnableOAuth2Client或@EnableResourceServer,则在测试配置文件中切换到基本身份验证,然后禁用该功能。在Spring Boot中,要完全关闭Web应用程序中的spring安全默认配置,您需要使用@EnableWebSecurity添加一个bean

答案 5 :(得分:-6)

以下对我有用:

            http
                .authorizeRequests()
                .anyRequest().permitAll();