Springboot SpringWebFlux SecurityConfig从属性文件中加载凭证

时间:2019-12-23 15:02:57

标签: java spring-boot spring-security spring-webflux

我在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

1 个答案:

答案 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