希望使用带有注释的Spring MVC + Spring Security。 Spring Security具有从XML文件或数据库获取角色信息的强大功能。但是,我们的角色信息可以从定制的SOAP Web服务访问。有关如何从Web服务获取角色信息的任何想法吗?
理想情况下,我想覆盖hasRoles()等并修改它,然后调用SOAP WS并返回用户的角色。我该怎么做?
还是其他任何想法?
答案 0 :(得分:1)
如果在使用spring-security
时需要自定义属性,则必须实现自己的UserDetailsService接口,该接口包含以下方法:
public UserDetails loadUserByUsername(final String email)
因此,在从数据源检索用户后,将调用添加到您的角色Web服务......就像这样:
public class UserDetailsExtendedService implements UserDetailsService {
@Autowired
private UsersDAO usersDao;
private UserDetails prepare(com.data.User user) {
boolean enabled = user.getState().equals(UserState.Active);
Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>();
for (UserRole r: /*CALL TO WEB-SERVICE*/) {
authorities.add(new GrantedAuthorityImpl(r.getName()));
}
return new UserDetails(user.getId(), user.getEmail(), user.getPassword(), user.getNickname(), user.getPosition(), user.getAvatar(), user.getCommunicationLanguage().getCode(),
user.getNotificationChannel(), user.getPartnerId(), enabled, enabled, enabled, enabled, authorities);
}
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(final String email)
throws UsernameNotFoundException, DataAccessException, HibernateException {
com.data.User user = usersDao.getByEmail(email);
if (user == null)
throw new UsernameNotFoundException(email);
return prepare(user);
}
}