package com.bstek.bdf2.core.service.impl;
|
|
import com.bstek.bdf2.core.business.IUser;
|
import com.bstek.bdf2.core.context.ContextHolder;
|
import com.bstek.bdf2.core.model.DefaultUser;
|
import com.bstek.bdf2.core.orm.hibernate.HibernateDao;
|
import com.bstek.bdf2.core.service.IUserService;
|
import com.bstek.dorado.core.resource.ResourceManager;
|
import com.bstek.dorado.core.resource.ResourceManagerUtils;
|
import com.bstek.dorado.data.provider.Criteria;
|
import com.bstek.dorado.data.provider.Page;
|
|
import org.apache.commons.lang.math.RandomUtils;
|
import org.apache.commons.lang3.StringUtils;
|
import org.hibernate.Query;
|
import org.hibernate.Session;
|
import org.springframework.security.authentication.encoding.PasswordEncoder;
|
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
|
import java.util.Collection;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Map;
|
|
|
/**
|
* @author Jacky.gao
|
* @since 2013-1-18
|
*/
|
@SuppressWarnings("deprecation")
|
public class DefaultUserService extends HibernateDao implements IUserService {
|
|
private PasswordEncoder passwordEncoder;
|
|
private static final ResourceManager resourceManager = ResourceManagerUtils
|
.get(DefaultUserService.class);
|
|
public UserDetails loadUserByUsername(String username)
|
throws UsernameNotFoundException {
|
|
String hql = " from " + DefaultUser.class.getName() + " where username=:username";
|
|
Map<String, Object> args = new HashMap<>();
|
args.put("username", username);
|
|
List<DefaultUser> list = this.query(hql, args);
|
|
if (list.size() == 0) {
|
throw new UsernameNotFoundException("User " + username
|
+ " is not exist");
|
} else {
|
return list.get(0);
|
}
|
}
|
|
public void loadPageUsers(Page<IUser> page, String companyId, Criteria criteria) {
|
|
try {
|
String hql = " from " + DefaultUser.class.getName() + " where companyId=:companyId";
|
Map<String, Object> args = new HashMap<>();
|
args.put("companyId", companyId);
|
|
String countHql = "select count(*) " + hql;
|
this.pagingQuery(page, hql, countHql, args);
|
|
} catch (Exception e) {
|
}
|
}
|
|
|
public Collection<IUser> loadUsersByDeptId(String deptId) {
|
String hql = " from " + DefaultUser.class.getName() + " where deptId=:deptId";
|
Map<String, Object> args = new HashMap<>();
|
args.put("deptId", deptId);
|
|
return this.query(hql, args);
|
}
|
|
public void changePassword(String username, String newPassword) {
|
|
String hql = " update " + DefaultUser.class.getName() + " set password=:newPassword,salt=:salt where username=:username";
|
Session session = this.getSessionFactory().openSession();
|
try {
|
|
Query query = session.createQuery(hql);
|
|
int salt = RandomUtils.nextInt(1000);
|
query.setString("newPassword", newPassword);
|
query.setString("salt", salt + "");
|
query.setString("username", username);
|
|
query.executeUpdate();
|
} catch (Exception e) {
|
|
} finally {
|
session.flush();
|
session.close();
|
}
|
}
|
|
public String checkPassword(String username, String password) {
|
DefaultUser user = (DefaultUser) ContextHolder.getLoginUser();
|
String salt = user.getSalt();
|
if (!passwordEncoder
|
.isPasswordValid(user.getPassword(), password, salt)) {
|
return resourceManager.getString("bdf2.core/passwordIncorrect");
|
} else {
|
return null;
|
}
|
}
|
|
public boolean checkPassword(String username, String password,
|
DefaultUser user) {
|
return passwordEncoder.isPasswordValid(user.getPassword(), password,
|
user.getSalt());
|
}
|
|
public IUser newUserInstance(String username) {
|
DefaultUser user = new DefaultUser();
|
user.setUsername(username);
|
return user;
|
}
|
|
public void setPasswordEncoder(PasswordEncoder passwordEncoder) {
|
this.passwordEncoder = passwordEncoder;
|
}
|
|
public void registerAdministrator(String username, String cname,
|
String ename, String password, String email, String mobile,
|
String companyId) {
|
|
int salt = RandomUtils.nextInt(1000);
|
password = passwordEncoder.encodePassword(password, salt);
|
|
DefaultUser defaultUser = new DefaultUser();
|
defaultUser.setUsername(username);
|
defaultUser.setCname(cname);
|
defaultUser.setPassword(password);
|
defaultUser.setSalt(salt + "");
|
defaultUser.setEmail(email);
|
defaultUser.setMobile(mobile);
|
defaultUser.setCompanyId(companyId);
|
defaultUser.setAdministrator(false);
|
|
Session session = this.getSessionFactory().openSession();
|
|
try {
|
session.save(defaultUser);
|
} catch (Exception e) {
|
|
} finally {
|
session.flush();
|
session.close();
|
}
|
}
|
|
@Override
|
public void changeUserInfo(String username, String newPassword,
|
String cname, String mobile) {
|
|
String hql = " update " + DefaultUser.class.getName() + " set ";
|
Session session = this.getSessionFactory().openSession();
|
try {
|
int salt = RandomUtils.nextInt(1000);
|
if (StringUtils.isNotEmpty(newPassword)) {
|
|
hql += " password=:newPassword,salt=:salt ";
|
newPassword = passwordEncoder.encodePassword(newPassword, salt);
|
}
|
|
if (StringUtils.isNotEmpty(cname)) {
|
hql += " cname=:cname,";
|
}
|
|
if (StringUtils.isNotEmpty(mobile)) {
|
hql += " mobile=:mobile,";
|
}
|
|
hql += " where username=:username";
|
|
Query query = session.createQuery(hql);
|
|
query.setString("password", newPassword);
|
query.setString("salt", salt + "");
|
query.setString("cname", cname);
|
query.setString("mobile", mobile);
|
query.setString("username", username);
|
|
query.executeUpdate();
|
|
} catch (Exception e) {
|
|
} finally {
|
session.flush();
|
session.close();
|
}
|
}
|
|
@Override
|
public DefaultUser loadUser(String username) {
|
String hql = " from " + DefaultUser.class.getName() + " where username=:username";
|
Map<String, Object> args = new HashMap<>();
|
args.put("username", username);
|
|
List<DefaultUser> list = this.query(hql, args);
|
|
if (null == list) return null;
|
|
return list.get(0);
|
}
|
}
|