我在springboot 2.2.1.RELEASE中使用spring web flux。我已经像这样配置了网络安全性
@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Bean
public SecurityWebFilterChain securityFilterChain(ServerHttpSecurity http) {
return http
.csrf().disable()
.authorizeExchange()
.pathMatchers("/actuator/**").permitAll()
.pathMatchers("/customer/**").hasRole("INTERNAL_APP")
.and()
.httpBasic()
.and()
.csrf().disable()
.formLogin().disable()
.build();
}
@Bean
public MapReactiveUserDetailsService userDetailsService() {
UserDetails user = User.builder()
.username("someusername")
.password("{bcrypt}$2a$10$fll1CVzOQ5qVGvzwwLlldsfsgwCgai7LxrzBkNxl2Xh41Ghk5pRWa")
.roles("INTERNAL_APP")
.build();
return new MapReactiveUserDetailsService(user);
}
}
这工作得很好。我现在需要从属性文件中加载用户名,密码和角色。我无法实现这一目标。我尝试使用@Value
,也使用@ConfigurationProperties
。但到目前为止没有运气。
我相信PropertyFileLoader自动配置是在SecurityConfiguration之后执行的。因此,这些字段没有被加载。
关于我如何避免在此配置文件中对凭证进行硬编码,而是从属性文件加载,是否有人有任何线索。
我知道使用WebSecurity
可以做到这一点。但是以某种方式无法使用WebFluxSecurity
答案 0 :(得分:1)
我能够通过.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC;.PY;.PYW
从application.properties
加载/访问用户名和密码
org.springframework.core.env.Environment
secret.user=user
secret.password=$2a$10$Gid/Ax6gZpTqT/SElZ3shO7oDsX7kdX7u1qPM.StfDyuccOcbnbgG
ref github:springboot-springwebflux-securityconfig-load-credentials-from-properties-file
替代
您可以使用@Configuration
@EnableWebFluxSecurity
public class SecurityConfig {
@Autowired private Environment environment;
@Bean
public PasswordEncoder encoder() {
return new BCryptPasswordEncoder();
}
....
@Bean
public MapReactiveUserDetailsService userDetailsService() {
UserDetails user = User.builder()
.username(environment.getProperty("secret.user")) // <----
.password(environment.getProperty("secret.password")) // <----
.roles("INTERNAL_APP")
.build();
return new MapReactiveUserDetailsService(user);
}
}
ConfigurationProperties
ref github using configutation properties