Spring Security禁用一个特定页面的HTTP Basic

时间:2016-05-19 13:59:23

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

我试图在春季添加网络安全,但我不希望过滤器适用于某些事情。如何在java中完成?

总的来说,我想做的是:

//login不应显示登录的HTTP基本身份验证提示,而其他所有内容都应通过过滤器并弹出登录提示窗口。

通过我在春天发现的各种例子,我能够想出一个开始,但它显然不起作用:

@Configuration
@EnableWebMvcSecurity
public class AuthSecurityConfig extends WebSecurityConfigurerAdapter {

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

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().antMatcher("/").authorizeRequests().anyRequest().permitAll();
        http.csrf().disable().antMatcher("/**").authorizeRequests().anyRequest().hasRole("ADMIN").and().httpBasic();
    }

    @Autowired
    protected void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.inMemoryAuthentication()
                .withUser("admin").password("admin123").roles("ADMIN")
                .and()
                .withUser("user").password("user123").roles("USER");
    }

}

1 个答案:

答案 0 :(得分:0)

重写您的configure(HttpSecurity http)方法,如下所示:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .httpBasic()
            .and()
            .authorizeRequests()
                .antMatchers("/", "/login").permitAll()
                .anyRequest().hasRole("ADMIN")
            .and()
            .csrf()
                .disable();
}
  

" /"和" /登录"不应该显示httpbasic身份验证提示   登录,而其他一切应该通过过滤器并弹出一个   登录提示窗口。

如果您认真计划使用HTTP Basic,我想您不需要单独的/login处理程序,因为基于浏览器的客户端可以使用默认的基于浏览器的弹出窗口,而其他客户端可以发送HTTP Basic请求通过Authorization标题。