usermanager.java

来自「anewssystem新闻发布系统集成使用了spring hibernate f」· Java 代码 · 共 123 行

JAVA
123
字号
package anni.asecurity.manager;

import java.util.List;

import anni.asecurity.domain.User;

import anni.core.dao.hibernate.HibernateEntityDao;

import anni.core.security.AuthenticationHelper;
import anni.core.security.cache.AcegiCacheManager;

import org.acegisecurity.GrantedAuthority;


/**
 * @author Lingo.
 * @since 2007年08月18日 下午 20时19分00秒578
 */
public class UserManager extends HibernateEntityDao<User> {
    /**
     * acegiCacheManager.
     */
    private AcegiCacheManager acegiCacheManager = null;

    /**
     * @param acegiCacheManager AcegiCacheManager.
     */
    public void setAcegiCacheManager(AcegiCacheManager acegiCacheManager) {
        this.acegiCacheManager = acegiCacheManager;
    }

    /**
     * 根据用户名和密码获得登陆的用户.
     *
     * @param loginId 用户名
     * @param password 密码
     * @return User 登陆用户
     */
    public User getUserByLoginidAndPasswd(String loginId, String password) {
        String hql = "from User u where u.username=? and u.password=?";

        List<User> list = getSession().createQuery(hql)
                              .setString(0, loginId).setString(1, password)
                              .list();

        if (list.size() > 0) {
            return list.get(0);
        } else {
            return null;
        }
    }

    /**
     * 删除用户时需在cache移除用户.
     *
     * @param o user
     */
    @Override
    public void remove(Object o) {
        super.remove(o);

        if (o instanceof User) {
            removeUserInCache(((User) o).getUsername());
        }
    }

    /**
     * 保存User前需要检查当前用户名是否有更改,若有则需先在cache中去除再重新加入.
     *
     * @param o Object User type only.
     */
    @Override
    public void save(Object o) {
        User user = (User) o;
        boolean isNew = (user.getId() == null);
        String orginName = "";

        if (!isNew) {
            User orginUser = get(user.getId());
            orginName = orginUser.getUsername();
            getHibernateTemplate().evict(orginUser);
        }

        super.save(user);

        if (isNew) {
            saveUserInCache(user);
        } else {
            user = get(user.getId());
            removeUserInCache(orginName);
            saveUserInCache(user);
        }
    }

    // ------------------------------------------------------------------------

    /**
     * 注意参数中的User需要已经与hibernate session关联,否则无法lazyload得到roles.
     *
     * @param user 用户
     */
    private void saveUserInCache(User user) {
        GrantedAuthority[] authorities = AuthenticationHelper
            .convertToGrantedAuthority(user.getRoles(), "name");

        //logger.info(java.util.Arrays.asList());
        if (user.getUsername() != null) {
            acegiCacheManager.addUser(user.getUsername(),
                user.getPassword(), user.isEnabled(), true, true, true,
                authorities);
        }
    }

    /**
     * 根据用户名,从缓存中删除用户.
     *
     * @param username 用户名
     */
    public void removeUserInCache(String username) {
        acegiCacheManager.removeUser(username);
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?