【问题标题】:Disable BasicAuth on specific sub paths在特定子路径上禁用 BasicAuth
【发布时间】:2016-06-29 22:49:10
【问题描述】:

我知道在 stackoverflow 上有一些问题,但没有任何帮助...

http
            .addFilterBefore(RestConfiguration.getCorsFilter(), ChannelProcessingFilter.class)
            .authorizeRequests() //Authorize Request Configuration
            .antMatchers("/api/**").hasRole("API")
            .antMatchers("/api/confirm/**").permitAll()
            .antMatchers("/api/version").permitAll()
            .anyRequest().authenticated()
            .and() //HTTP basic Authentication only for API
            .antMatcher("/api/**").httpBasic()
            .and() // angularjs requires csrf
            .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class)
            .csrf().disable();

我有一个带有一些子路径的 api 路径。但我想在没有基本身份验证的情况下访问其中两个(confirm/**version)。

我该怎么做?我总是得到登录对话框。

【问题讨论】:

    标签: java spring spring-security spring-boot basic-authentication


    【解决方案1】:

    您应该在/api/confirm/**/api/version 之后使用antMatchers("/api/**").hasRole("API") 规则。当前的顺序不太正确:

    .antMatchers("/api/confirm/**").permitAll()
    .antMatchers("/api/version").permitAll()
    .antMatchers("/api/**").hasRole("API")
    

    总而言之,如果您只想保护/api/* 并让公共访问/api/confirm/**/api/version 和所有其他没有api 前缀的路径,您应该有一个HttpSecurity 配置,如下所示:

    http
            // Same as before
            .httpBasic()
            .and()
            .authorizeRequests()
                .antMatchers("/api/confirm/**").permitAll()
                .antMatchers("/api/version").permitAll()
                .antMatchers("/api/**").hasRole("API")
                .anyRequest().permitAll();
            // Same as before
    

    【讨论】:

    • 但是我在其他路径上也有 httpBasic 对..?
    • 您可以使用permitAll排除它们
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 2016-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多