Бьюсь об заклад, вы уже решили свою проблему, но, возможно, это может помочь кому-то еще ...
1- Конфигурация приложения
Вам необходимо добавить собственную реализацию UserDetailsService .
public class AppConfig extends WebMvcAutoConfiguration {
...
@Bean
public UserSecurityService userSecurityService() {
return new UserSecurityService();
}
...
}
2 - объект пользователя
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 - Репозиторий пользователей
@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 - Реализация 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- Наконец, вы должны расширить GlobalMethodSecurityConfiguration
@Configuration
@EnableGlobalMethodSecurity(prePostEnabled = true)
public class MethodSecurityConfig extends GlobalMethodSecurityConfiguration {
@Override
protected MethodSecurityExpressionHandler createExpressionHandler() {
DefaultMethodSecurityExpressionHandler expressionHandler = new DefaultMethodSecurityExpressionHandler();
return expressionHandler;
}
}
Теперь все это можно добавить:
@PreAuthorize("hasRole('ROLE_SUPER_USER')")
Для проверки доступа к роли пользователя.