在Spring MVC中验证用户 - 几种类型的用户(不同的类)

时间:2014-04-16 23:10:03

标签: java spring hibernate spring-mvc authentication

我正在使用Spring MVC + Hibernate组合开发一个Web应用程序。今晚我来了一个很大的“但......”:

我有两种不同类型的用户,有很多不同的属性。也就是说,我希望应用程序能够验证几种类型的用户对象。几天前我认为这不会成为一个问题,我写了一个BaseUser实体和一个IUser接口,所以我得到了:

RegularUser extends BaseUser implements IUser;

PremiumUser extends BaseUser implements IUser;

现在,出现了几个问题:我有interface UserService

public interface UserService {
    public boolean authenticateUser(IUser user);
}

我应该拥有与IUser实现一样多的此接口实现吗? 当我想对用户进行身份验证时,如何在创建用户对象进行身份验证之前告知高级用户的常规用户?

我的目标是让应用程序选择正确的对象进行身份验证,因为在所有用户实现中不能有两个具有相同名称的用户。我有点困惑。

一些额外信息:

authenticate(IUser user)方法的示例实现是:

@Service("regularUserService")
public class RegularUserServiceImpl implements UserService {

@Autowired
RegularUserDAOImpl userDAO;

@Transactional
public boolean authenticateUser(IUser user) {
    if (user == null || !(user instanceof RegularUser)) {
        return false;
    } else {
        String name = user.getName();
        String pass = user.getPassword();       
        RegularUser existingUser = userDAO.findByName(name);

        if (existingUser == null) {
            return false;
        } else {
            if (pass.equals(existingUser.getPassword())) {
                if (existingUser.getIsEnabled()) {
                    return true;
                }
            }
        }
    }
    return false;
}
...
}

如果我有一个具有相同authenticate()方法的等效PremiumUserServiceImpl,那么Spring将如何知道要代理哪一个(即,选择哪个UserService实现)?

提前致谢, 丹。

1 个答案:

答案 0 :(得分:0)

  

如何在创建之前告知高级用户的常规用户   用户对象进行身份验证?

好的,你有

@Service("regularUserService")
public class RegularUserServiceImpl implements UserService {
    .....
}

和另一个像:

@Service("premiumUserService")
public class PremiumUserServiceImpl implements UserService {
    .....
}

好的,但Spring会找到UserService的多个实现,使用@Primary注释告诉Spring当存在多个匹配的bean实例时,哪个autowire候选者会首选。 例如,如果您想像之前一样RegularUserService,请在其上添加@Primary

@Primary
@Service("regularUserService")
public class RegularUserServiceImpl implements UserService {
    .....
}

<小时/> 另见:

相关问题