com.kingen.service.account.AccountService.java Source code

Java tutorial

Introduction

Here is the source code for com.kingen.service.account.AccountService.java

Source

/*******************************************************************************
 * Copyright (c) 2005, 2014 springside.github.io
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 *******************************************************************************/
package com.kingen.service.account;

import java.util.List;
import java.util.Map;

import org.activiti.engine.IdentityService;
import org.activiti.engine.identity.UserQuery;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.shiro.SecurityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import org.springframework.util.CollectionUtils;

import com.google.common.collect.Maps;
import com.kingen.aop.ServiceLogAnnotation;
import com.kingen.bean.Menu;
import com.kingen.bean.SysOrgMenu;
import com.kingen.bean.User;
import com.kingen.repository.account.MenuDao;
import com.kingen.repository.account.UserDao;
import com.kingen.service.CommonService;
import com.kingen.util.BeanUtils;
import com.kingen.util.Constants;
import com.kingen.util.Digests;
import com.kingen.util.Encodes;
import com.kingen.util.Global;
import com.kingen.util.Page;

/**
 * ?.
 * 
 */
// Spring Service Bean.
@Component
@Transactional
public class AccountService extends CommonService<User, String> {

    public static final String HASH_ALGORITHM = "SHA-1";
    public static final int HASH_INTERATIONS = 1024;
    private static final int SALT_SIZE = 8;

    private static Logger logger = LoggerFactory.getLogger(AccountService.class);

    @Autowired
    private UserDao userDao;
    @Autowired
    private MenuDao menuDao;

    @Transactional(readOnly = true)
    public User findUserByLoginName(String loginName) {
        return userDao.findByLoginName(loginName);
    }

    /**
     * ?Shiro?LoginName.
     */
    private String getCurrentUserName() {
        User user = (User) SecurityUtils.getSubject().getPrincipal();
        return user.getUsername();
    }

    /**
     * ???salt?1024 sha-1 hash
     */
    private void entryptPassword(User user) {

        byte[] salt = Digests.generateSalt(SALT_SIZE);
        user.setSalt(Encodes.encodeHex(salt));

        byte[] hashPassword = Digests.sha1(user.getPassword().getBytes(), salt, HASH_INTERATIONS);
        user.setPassword(Encodes.encodeHex(hashPassword));
    }

    /**
     * ?
     * @param user
     */
    public void create(User user) {
        entryptPassword(user);
        userDao.save(user);

    }

    /**
     * 
     * @param user
     */
    public void update(User user) {
        userDao.update(user);

    }

    public void del(User u) {
        userDao.delete(u.getUserId());

    }

    public void del(List<User> beanList) {
        if (!CollectionUtils.isEmpty(beanList)) {
            for (User user : beanList) {
                del(user);
            }
        }

    }

    public void updatePwd(User user) {
        entryptPassword(user);
        userDao.update(user);

    }

    public static void main(String[] a) {

        byte[] salt = Digests.generateSalt(SALT_SIZE);
        //logger.info("salt"+Encodes.encodeHex(salt));

        byte[] hashPassword = Digests.sha1("321".getBytes(), Encodes.decodeHex("848c7f1e3c58ca09"),
                HASH_INTERATIONS);

        //      String  hashPassword = new SimpleHash("SHA-1", "321", ByteSource.Util.bytes( Encodes.decodeHex("848c7f1e3c58ca09")), HASH_INTERATIONS).toString();
        logger.info("pwd   " + Digests.encryptPassword("123", "8449a736b311440a"));
        //      logger.info("pwd"+hashPassword);
    }

    /**
     * ?ehcache
     * @return
     */
    @Cacheable(value = "sysCache")
    public List<Menu> findAllMenus() {
        return menuDao.find();
    }

    public Page<User> getUsers(Page<User> page, User user) {
        Page<User> p = userDao.findUsers(page, user);
        return p;
    }

    public List<SysOrgMenu> findMenusBy(String orgId) {
        String hql = "from SysOrgMenu where id.orgId=:orgId";
        Map<String, Object> paramter = Maps.newHashMap();
        paramter.put("orgId", orgId);
        return menuDao.findme(hql, paramter);
    }

    @ServiceLogAnnotation(action = "?")
    public void saveUser(User data, String[] funidvalue, Boolean synToActiviti) throws Exception {
        if (data != null) {
            User u = userDao.findByUserid(data.getUserId());//

            if (u != null) {
                throw new Exception("???");
            } else {
                entryptPassword(data);
                data.setStatus(Constants.UserStatusEnum.Active.getIndex());//?
                userDao.save(data);

                // ??Activiti Identify?
                if (synToActiviti) {
                    UserQuery userQuery = identityService.createUserQuery();
                    List<org.activiti.engine.identity.User> activitiUsers = userQuery.userId(data.getUserId())
                            .list();

                    saveActivitiUser(data);
                }

            }

        }
    }

    @ServiceLogAnnotation(action = "")
    public void updateUser(User data, String[] funidvalue, Boolean synToActiviti) {
        User t = userDao.findByUserid(data.getUserId());
        BeanUtils.copyNotNullProperties(data, t, new String[] { "password" });//????

        update(t);

        // ??Activiti Identify?
        if (synToActiviti) {

            saveActivitiUser(t);
        }

    }

    public User one(User user) {

        return userDao.findByUserid(user.getUserId());
    }

    public List<Menu> findMenuByuserId(String userIdString) {
        List<Menu> menus = menuDao.findMenusBy(userIdString);
        return menus;
    }

    /**
     * ??
     * @param userIds
     * @param status
     */
    @ServiceLogAnnotation(action = "?")
    public void updateUser(List<String> userIds, String status) {
        Assert.notEmpty(userIds, "ID?");
        for (String id : userIds) {
            User t = userDao.findByUserid(id);
            t.setStatus(status);
            update(t);
        }

    }

    @ServiceLogAnnotation(action = "??")
    public void updateUsersPwd(List<String> userIds) {
        Assert.notEmpty(userIds, "ID?");
        for (String id : userIds) {
            User t = userDao.findByUserid(id);
            t.setPassword(Global.getConfig("initialPwd"));//??
            updatePwd(t);
        }

    }

    public void delThem(List<String> userIds, Boolean synToActiviti) {
        Assert.notEmpty(userIds, "ID?");
        for (String id : userIds) {
            userDao.delete(id);

            if (synToActiviti) {
                // ?Activiti User,membership?
                identityService.deleteUser(id);
            }
        }

    }

    public void testException() throws Exception {
        throw new Exception("test");

    }

    //? 
    @Autowired
    protected IdentityService identityService;

    /**
     * / Activiti {@link org.activiti.engine.identity.User}
     * @param user  , {@link User}
     */
    //private ??
    private void saveActivitiUser(User user) {
        org.activiti.engine.identity.User activitiUser = identityService.createUserQuery().userId(user.getUserId())
                .singleResult();
        if (activitiUser == null) {
            activitiUser = identityService.newUser(user.getUserId());
        }
        activitiUser.setFirstName(user.getUsername());
        activitiUser.setLastName(user.getUsername());
        activitiUser.setEmail("");
        activitiUser.setPassword(user.getPassword());
        identityService.saveUser(activitiUser);
        logger.info("add activiti user: {}" + ToStringBuilder.reflectionToString(activitiUser));
    }

}