我在春季启动项目中使用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结尾的所有网址
谢谢
答案 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()
即可。