Java Spring Security从Web服务获取角色

Java Spring Security从Web服务获取角色,java,spring,web-services,spring-mvc,spring-security,Java,Spring,Web Services,Spring Mvc,Spring Security,希望通过注释使用SpringMVC+SpringSecurity。SpringSecurity具有从XML文件或数据库获取角色信息的强大功能。但是,我们的角色信息可以从定制的soapweb服务访问。您知道如何从Web服务获取角色信息吗 理想情况下,我希望重写hasRoles()等并对其进行修改,以便它随后调用SOAP WS并返回用户的角色。我该怎么做 或任何其他想法?如果在使用spring security时需要自定义属性,则必须实现自己的界面,其中包含以下方法: public UserDeta

希望通过注释使用SpringMVC+SpringSecurity。SpringSecurity具有从XML文件或数据库获取角色信息的强大功能。但是,我们的角色信息可以从定制的soapweb服务访问。您知道如何从Web服务获取角色信息吗

理想情况下,我希望重写hasRoles()等并对其进行修改,以便它随后调用SOAP WS并返回用户的角色。我该怎么做


或任何其他想法?

如果在使用
spring security
时需要自定义属性,则必须实现自己的界面,其中包含以下方法:

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);
    }
}
公共类UserDetailsTendedService实现UserDetailsService{
@自动连线
私人用户sdao UsersDAO;
私有用户详细信息准备(com.data.User){
布尔启用=user.getState().equals(UserState.Active);
收集权限=新建ArrayList();
对于(用户角色r:/*调用WEB-SERVICE*/){
add(新的GrantedAuthorityImpl(r.getName());
}
返回新的用户详细信息(user.getId()、user.getEmail()、user.getPassword()、user.get昵称()、user.getPosition()、user.getAvatar()、user.getCommunicationLanguage().getCode(),
user.getNotificationChannel(),user.getPartnerId(),enabled,enabled,enabled,enabled,authorities);
}
@凌驾
@事务(只读=真)
public UserDetails loadUserByUsername(最终字符串电子邮件)
抛出UsernameNotFoundException、DataAccessException、HibernateException{
com.data.User User=usersDao.getByEmail(电子邮件);
if(user==null)
抛出新用户名NotFoundException(电子邮件);
退货准备(用户);
}
}