Je parie que vous résoudre déjà votre problème, mais peut-être cela peut aider quelqu'un d'autre ...
1- Configuration du app
Vous devez ajouter votre propre implémentation de UserDetailsService.
public class AppConfig extends WebMvcAutoConfiguration {
...
@Bean
public UserSecurityService userSecurityService() {
return new UserSecurityService();
}
...
}
2- entité utilisateur
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- UserRepository
@Component
public class UserRepository extends CouchDbRepositorySupport<User> {
...
@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- Mise en oeuvre de UserDetailsService, UserSecurityService
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<GrantedAuthority> grantedAuths = new ArrayList<GrantedAuthority>();
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- Enfin, vous devez étendre GlobalMethodSecurityConfiguration
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
return expressionHandler;
}
}
Whit tout cela maintenant, vous pouvez ajouter:
@PreAuthorize("hasRole('ROLE_SUPER_USER')")
Pour valider l'accès en ce qui concerne le rôle de l'utilisateur.
Pouvez-vous s'il vous plait reformuler? Je trouve plutôt difficile de voir ce qui est demandé. –
Un bon tutoriel pour implémenter Spring Security Core à CouchDB? –
@ code4jhon si vous en avez encore besoin, je réponds à la question et cela pourrait aider :) – gonzalon