SpringBoot基本身份验证忽略以.wsdl结尾的网址

时间:2017-03-17 05:00:01

标签: java spring-boot basic-authentication

我在春季启动项目中使用basicAuth

要求对服务URL进行身份验证,而在WSDL上则不应进行身份验证。

我想保留所有经过验证的&忽略了application.yml文件中的网址。

类似的东西:

auth.authenticated: /onlineshop/v1/ecart,/onlineshop/v1/wishlist
auth.ignored: /onlineshop/v1/ecart.wsdl,/onlineshop/v1/wishlist.wsdl


@EnableWebSecurity
@Configuration
class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${auth.authenticated}")
    String[] allAuthenticated;

    @Value("${auth.ignored}")
    String[] allIgnored;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // Something like
        for (String ignored: allIgnored) {
            http.authorizeRequests().antMatchers(ignored).permitAll();
        }

        // Something like
        for (String authenticated: allAuthenticated) {
            http.authorizeRequests().antMatchers(authenticated).authenticated();
        }
        ....
    }

}

上面的代码是粗略的草稿(对不起),但我已尝试按照这些行进行编码,但它无效。

它没有应用任何形式的身份验证。

请建议我如何才能完成这项工作。

此外,我不能忽略以.wsdl结尾的选择性网址,而是如何忽略以.wsdl结尾的所有网址

谢谢

1 个答案:

答案 0 :(得分:2)

首先,我认为您应该采用白名单方法来允许未经身份验证的访问。因此,我删除了allAuthenticated参数,并要求对每个不在allIgnored参数中的网址进行身份验证,这样设计更安全。

以下配置足以满足您所需的功能。

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${auth.ignored}")
    private String[] allIgnored;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers(allIgnored).permitAll()
            .anyRequest().authenticated()
            .and()
            .httpBasic();
    }

}

请注意,由于antMatchers()需要String[],因此您无需自行迭代循环。

如果您仍想使用allAuthenticated进行配置,则只需在配置中添加.antMatchers(allAuthenticated).authenticated()即可。