Spring Boot + Spring Security Authorization + CouchDB 1- Configuracion de la applicacion Vamos a necesitar crear nuestra propia implementacion de UserDetailsService (Punto 4).
|
public class AppConfig extends WebMvcAutoConfiguration { ... @Bean public UserSecurityService userSecurityService() { return new UserSecurityService(); } ... } |
2- Extendemos la clase User
|
public class CustomUserDetail extends org.springframework.security.core.userdetails.User { public CustomUserDetail(String username, String password, Collection<? extends GrantedAuthority> authorities) { super(username, password, authorities); } } |
3- El acceso al usuario en CouchDb mediante UserRepository
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Component public UserRepositoryextends CouchDbRepositorySupport { ... @View( name = "findUserByUsername", map = "function(doc) { if (doc.docType == 'User' ) emit( doc.username, doc._id ) }") public User findUserByUsername(String username) { return queryViewReturnSingleEntity("findUserByUsername",username); } ... } |
4- Implementacion de UserDetailsService, UserSecurityService
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
public class UserSecurityService implements UserDetailsService { @Autowired private UserRepository userRepo; @Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { //Spring user UserDetails userDetails = null; //CouchDB Object User user = userRepo.getByUsername(username); List grantedAuths = new ArrayList(); String rol = user.getRol(); grantedAuths.add(new SimpleGrantedAuthority(rol)); if(user != null){ //Spring user implementation userDetails = new CustomUserDetail(user.getUsername(), user.getPassword(), grantedAuths); } if (userDetails == null) { throw new UsernameNotFoundException("User not found"); } return userDetails; } } |
5- Finalmente extendemos GlobalMethodSecurityConfiguration
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
@Configuration @EnableGlobalMethodSecurity(prePostEnabled = true) public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration { @Override protected MethodSecurityExpressionHandler createExpressionHandler() { DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler(); return expressionHandler; } } |
Con todo esto … Continue reading Implementar Spring Security Authorization en CouchDB