我正在尝试使用基本身份验证设置一个vanilla Spring Boot环境。
基本上我唯一要定制的是用户,受保护路径和自定义密码编码器。
Spring Boot文档说明:
在不更改任何其他自动配置的情况下覆盖访问规则 功能添加WebConfigurerAdapter类型的@Bean @Order(SecurityProperties.ACCESS_OVERRIDE_ORDER)。
注意:我认为WebConfigurerAdapter应该是WebSecurityConfigurerAdapter。
所以我尝试了以下内容:
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Autowired
private PasswordEncoder passwordEncoder;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/api/**").hasRole("USER")
.antMatchers("/management/**").hasRole("ADMIN");
// @formatter:on
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// @formatter:off
auth
.inMemoryAuthentication()
.passwordEncoder(passwordEncoder)
.withUser("admin")
.password(passwordEncoder.encode("pwd"))
.roles("USER", "ADMIN")
.and()
.withUser("user")
.password(passwordEncoder.encode("pwd"))
.roles("USER");
// @formatter:on
}
}
默认的Boot安全性似乎正是我想要的:
security.enable-csrf=false
security.basic.enabled=true
security.sessions=stateless
但是,当我运行应用程序时,基本身份验证不起作用。
当我使用http.httpBasic()
在我的WebSecurityConfigurerAdapter中显式配置它时,如:
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.httpBasic()
.and()
.authorizeRequests()
.antMatchers("/assets/**").permitAll()
.antMatchers("/api/**").hasRole("USER")
.antMatchers("/management/**").hasRole("ADMIN");
// @formatter:on
}
然后基本身份验证正在运行。
因此上面的初始设置似乎没有采用默认配置。
我错过了什么吗?
答案 0 :(得分:0)
每个WebSecurityConfigurer
都有自己的过滤器链,其中包含自己的请求匹配器和安全规则。添加WebSecurityConfigurer
(对于文档中的拼写错误抱歉)并不会更改默认的启动自动配置过滤器链,但它对自己的过滤器链也没有任何魔力。您需要告诉Spring Security如何保护这些资源 - 您为其提供了访问规则但没有认证策略。有意义吗?