1ea28f4b338bec8e3335647022b4b618441f0bf0
[institute/sw-backend.git] /
1 package com.supwisdom.infras.security.reactive;
2
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;
17
18 import com.supwisdom.infras.security.api.InfrasApiUserController;
19
20 import reactor.core.publisher.Flux;
21
22 @Configuration
23 @ConditionalOnClass({ Flux.class, EnableWebFluxSecurity.class, WebFilterChainProxy.class })
24 public class InfrasSecurityReactiveAutoConfiguration {
25
26   private static final Logger logger = LoggerFactory.getLogger(InfrasSecurityReactiveAutoConfiguration.class);
27   
28   @Bean
29   @ConditionalOnMissingBean({PasswordEncoder.class})
30   public PasswordEncoder passwordEncoder() {
31     
32     PasswordEncoder passwordEncoder = PasswordEncoderFactories.createDelegatingPasswordEncoder();
33     logger.debug("InfrasSecurityReactiveAutoConfiguration passwordEncoder is {}", passwordEncoder);
34     
35     return passwordEncoder;
36   }
37
38   @Bean
39   @ConditionalOnMissingBean({ReactiveUserDetailsService.class})
40   public MapReactiveUserDetailsService reactiveUserDetailsService() {
41     
42     // ensure the passwords are encoded properly
43     @SuppressWarnings("deprecation")
44     UserBuilder users = User.withDefaultPasswordEncoder();
45     
46     MapReactiveUserDetailsService reactiveUserDetailsService = new MapReactiveUserDetailsService(
47         users.username("user").password("password").roles("USER").build(),
48         users.username("admin").password("password").roles("USER","ADMIN").build()
49         );
50     logger.debug("InfrasSecurityReactiveAutoConfiguration reactiveUserDetailsService is {}", reactiveUserDetailsService);
51     
52     return reactiveUserDetailsService;
53   }
54   
55   
56   
57   @Bean
58   @ConditionalOnMissingBean(InfrasApiUserController.class)
59   public InfrasApiUserController infrasApiUserController() {
60     InfrasApiUserController infrasApiUserController = new InfrasApiUserController();
61     logger.debug("InfrasSecurityReactiveAutoConfiguration infrasApiUserController is {}", infrasApiUserController);
62     
63     return infrasApiUserController;
64   }
65   
66 }