1 package com.supwisdom.infras.security.reactive;
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5 import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
6 import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
7 import org.springframework.context.annotation.Bean;
8 import org.springframework.context.annotation.Configuration;
9 import org.springframework.security.config.annotation.web.reactive.EnableWebFluxSecurity;
10 import org.springframework.security.core.userdetails.MapReactiveUserDetailsService;
11 import org.springframework.security.core.userdetails.ReactiveUserDetailsService;
12 import org.springframework.security.core.userdetails.User;
13 import org.springframework.security.core.userdetails.User.UserBuilder;
14 import org.springframework.security.crypto.factory.PasswordEncoderFactories;
15 import org.springframework.security.crypto.password.PasswordEncoder;
16 import org.springframework.security.web.server.WebFilterChainProxy;
18 import com.supwisdom.infras.security.api.InfrasApiUserController;
20 import reactor.core.publisher.Flux;
23 @ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class, WebFilterChainProxy.class })
24 public class InfrasSecurityReactiveAutoConfiguration {
26 private static final Logger logger = LoggerFactory.getLogger(InfrasSecurityReactiveAutoConfiguration.class);
29 @ConditionalOnMissingBean({PasswordEncoder.class})
30 public PasswordEncoder passwordEncoder() {
32 PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
33 logger.debug("InfrasSecurityReactiveAutoConfiguration passwordEncoder is {}", passwordEncoder);
35 return passwordEncoder;
39 @ConditionalOnMissingBean({ReactiveUserDetailsService.class})
40 public MapReactiveUserDetailsService reactiveUserDetailsService() {
42 // ensure the passwords are encoded properly
43 @SuppressWarnings("deprecation")
44 UserBuilder users = User.withDefaultPasswordEncoder();
46 MapReactiveUserDetailsService reactiveUserDetailsService = new MapReactiveUserDetailsService(
47 users.username("user").password("password").roles("USER").build(),
48 users.username("admin").password("password").roles("USER","ADMIN").build()
50 logger.debug("InfrasSecurityReactiveAutoConfiguration reactiveUserDetailsService is {}", reactiveUserDetailsService);
52 return reactiveUserDetailsService;
58 @ConditionalOnMissingBean(InfrasApiUserController.class)
59 public InfrasApiUserController infrasApiUserController() {
60 InfrasApiUserController infrasApiUserController = new InfrasApiUserController();
61 logger.debug("InfrasSecurityReactiveAutoConfiguration infrasApiUserController is {}", infrasApiUserController);
63 return infrasApiUserController;