|
@@ -1,20 +1,14 @@
|
|
|
package com.sooka.module.web.system.service.impl;
|
|
|
|
|
|
import com.google.common.collect.Maps;
|
|
|
-import com.sooka.common.constant.CmsConst;
|
|
|
-import com.sooka.common.utils.CheckSumUtil;
|
|
|
import com.sooka.common.utils.ControllerUtil;
|
|
|
import com.sooka.common.utils.JsonUtil;
|
|
|
import com.sooka.common.utils.StrUtil;
|
|
|
-import com.sooka.component.shiro.PasswordKit;
|
|
|
import com.sooka.module.web.system.service.CmsUserService;
|
|
|
-import com.sooka.module.web.system.vo.UserVo;
|
|
|
import com.sooka.mybatis.mapper.TCmsUserMapper;
|
|
|
import com.sooka.mybatis.model.TCmsUser;
|
|
|
-import org.apache.commons.beanutils.BeanUtils;
|
|
|
-import org.apache.shiro.SecurityUtils;
|
|
|
-import org.apache.shiro.authc.*;
|
|
|
-import org.apache.shiro.subject.Subject;
|
|
|
+import org.apache.shiro.crypto.SecureRandomNumberGenerator;
|
|
|
+import org.apache.shiro.crypto.hash.Md5Hash;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.cache.Cache;
|
|
|
import org.springframework.cache.ehcache.EhCacheCacheManager;
|
|
@@ -53,6 +47,14 @@ public class CmsUserServiceImpl implements CmsUserService {
|
|
|
return tryCount;
|
|
|
}
|
|
|
|
|
|
+ public boolean matches(TCmsUser user, String newPassword) {
|
|
|
+ return user.getPassword().equals(encryptPassword(user.getUsername(), newPassword, user.getSalt()));
|
|
|
+ }
|
|
|
+
|
|
|
+ public String encryptPassword(String loginName, String password, String salt) {
|
|
|
+ return new Md5Hash(loginName + password + salt).toHex();
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public Map<String, Object> login(HttpServletRequest request) {
|
|
|
String username = request.getParameter("username"), password = request.getParameter("password"),
|
|
@@ -66,37 +68,19 @@ public class CmsUserServiceImpl implements CmsUserService {
|
|
|
return result;
|
|
|
}
|
|
|
HttpSession session = request.getSession();
|
|
|
- Subject currentUser = SecurityUtils.getSubject();
|
|
|
- UsernamePasswordToken usernamePasswordToken = new UsernamePasswordToken(username, password);
|
|
|
- /*是否需要记住我*/
|
|
|
- if ("true".equals(remberMe)) {
|
|
|
- usernamePasswordToken.setRememberMe(true);
|
|
|
- }
|
|
|
try {
|
|
|
- currentUser.login(usernamePasswordToken);
|
|
|
TCmsUser user = selectByUsername(username);
|
|
|
user.setLoginTime(new Date());
|
|
|
user.setLastIp(ControllerUtil.getRemoteAddress(request));
|
|
|
/*更新用户的登陆信息*/
|
|
|
userMapper.updateByPrimaryKey(user);
|
|
|
- /*userVo和TSysUser没什么区别,只是增加了siteId*/
|
|
|
- UserVo userVo = new UserVo();
|
|
|
- BeanUtils.copyProperties(userVo, user);
|
|
|
/*设置session*/
|
|
|
- session.setAttribute(CmsConst.SITE_USER_SESSION_KEY, userVo);
|
|
|
+ session.setAttribute("cms-login-user", user);
|
|
|
result.put("success", true);
|
|
|
result.put("message", "登录成功!");
|
|
|
- } catch (UnknownAccountException e) {
|
|
|
- result.put("message", "账号输入错误!");
|
|
|
- } catch (IncorrectCredentialsException e) {
|
|
|
- result.put("message", "密码输入错误!");
|
|
|
- putInCache(cache, username);
|
|
|
- } catch (LockedAccountException e) {
|
|
|
- result.put("message", "当前账号已被停用!");
|
|
|
- } catch (AuthenticationException ae) {
|
|
|
- result.put("message", "账号或者密码输入错误!");
|
|
|
} catch (Exception e) {
|
|
|
- result.put("message", "发生了一个错误!");
|
|
|
+ result.put("message", "账号或者密码输入错误!");
|
|
|
+ putInCache(cache, username);
|
|
|
}
|
|
|
return result;
|
|
|
}
|
|
@@ -106,13 +90,25 @@ public class CmsUserServiceImpl implements CmsUserService {
|
|
|
return userMapper.selectByUsername(username);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 生成随机盐
|
|
|
+ */
|
|
|
+ public static String randomSalt() {
|
|
|
+ // 一个Byte占两个字节,此处生成的3字节,字符串长度为6
|
|
|
+ SecureRandomNumberGenerator secureRandom = new SecureRandomNumberGenerator();
|
|
|
+ String hex = secureRandom.nextBytes(3).toHex();
|
|
|
+ return hex;
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public String insert(TCmsUser user) {
|
|
|
/* 加工password */
|
|
|
if (!StrUtil.isBlank(user.getPassword().trim())) {
|
|
|
- String salt = CheckSumUtil.getMD5(user.getUsername().trim());
|
|
|
- user.setPassword(PasswordKit.encodePassword(user.getPassword().trim(), salt));
|
|
|
- user.setSalt(salt);
|
|
|
+// String salt = CheckSumUtil.getMD5(user.getUsername().trim());
|
|
|
+// user.setPassword(PasswordKit.encodePassword(user.getPassword().trim(), salt));
|
|
|
+// user.setSalt(salt);
|
|
|
+ user.setSalt(randomSalt());
|
|
|
+ user.setPassword(encryptPassword(user.getUsername(), user.getPassword(), user.getSalt()));
|
|
|
}
|
|
|
if (userMapper.insert(user) > 0) {
|
|
|
return JsonUtil.toSUCCESS("注册成功");
|