Skip to content

Commit 674796a

Browse files
🚔 优化密码加盐处理
1 parent d9337b6 commit 674796a

File tree

5 files changed

+33
-18
lines changed

5 files changed

+33
-18
lines changed

src/main/java/io/geekidea/springbootplus/shiro/service/impl/LoginServiceImpl.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,11 +115,11 @@ public LoginSysUserTokenVo login(LoginParam loginParam) throws Exception {
115115
}
116116

117117
// 实际项目中,前端传过来的密码应先加密
118-
// 原始密码:123456
119-
// 加密规则:sha256(666666+123456) = 751ade2f90ceb660cb2460f12cc6fe08268e628e4607bdb88a00605b3d66973c
120-
String encryptPassword = PasswordUtil.encrypt(loginParam.getPassword());
118+
// 原始密码明文:123456
119+
// 原始密码前端加密:sha256(123456)
120+
// 后台加密规则:sha256(sha256(123456) + salt)
121+
String encryptPassword = PasswordUtil.encrypt(loginParam.getPassword(), sysUser.getSalt());
121122
if (!encryptPassword.equals(sysUser.getPassword())) {
122-
log.error("用户名或密码错误");
123123
throw new AuthenticationException("用户名或密码错误");
124124
}
125125

src/main/java/io/geekidea/springbootplus/system/controller/SysPermissionController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -104,8 +104,8 @@ public ApiResult<Paging<SysPermissionQueryVo>> getSysPermissionPageList(@Valid @
104104
* 获取所有菜单列表
105105
*/
106106
@PostMapping("/getAllMenuList")
107-
@ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermissionTreeVo.class)
108-
public ApiResult<SysPermissionTreeVo> getAllMenuList() throws Exception {
107+
@ApiOperation(value = "获取所有菜单列表", notes = "获取所有菜单列表", response = SysPermission.class)
108+
public ApiResult<SysPermission> getAllMenuList() throws Exception {
109109
List<SysPermission> list = sysPermissionService.getAllMenuList();
110110
return ApiResult.ok(list);
111111
}
@@ -125,8 +125,8 @@ public ApiResult<SysPermissionTreeVo> getAllMenuTree() throws Exception {
125125
* 根据用户id获取菜单列表
126126
*/
127127
@PostMapping("/getMenuListByUserId/{userId}")
128-
@ApiOperation(value = "根据用户id获取菜单列表", notes = "根据用户id获取菜单列表", response = SysPermissionTreeVo.class)
129-
public ApiResult<SysPermissionTreeVo> getMenuListByUserId(@PathVariable("userId") Long userId) throws Exception {
128+
@ApiOperation(value = "根据用户id获取菜单列表", notes = "根据用户id获取菜单列表", response = SysPermission.class)
129+
public ApiResult<SysPermission> getMenuListByUserId(@PathVariable("userId") Long userId) throws Exception {
130130
List<SysPermission> list = sysPermissionService.getMenuListByUserId(userId);
131131
return ApiResult.ok(list);
132132
}

src/main/java/io/geekidea/springbootplus/system/service/impl/SysUserServiceImpl.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,11 +77,12 @@ public boolean saveSysUser(SysUser sysUser) throws Exception {
7777
// 校验部门和角色
7878
checkDepartmentAndRole(sysUser.getDepartmentId(), sysUser.getRoleId());
7979
// 生成盐值
80-
sysUser.setSalt(SaltUtil.generateSalt());
80+
String salt = SaltUtil.generateSalt();
81+
sysUser.setSalt(salt);
8182
sysUser.setId(null);
8283

8384
// 密码加密
84-
String newPassword = PasswordUtil.encrypt(sysUser.getPassword());
85+
String newPassword = PasswordUtil.encrypt(sysUser.getPassword(), salt);
8586
sysUser.setPassword(newPassword);
8687

8788
// 保存系统用户
@@ -178,12 +179,13 @@ public boolean updatePassword(UpdatePasswordParam updatePasswordParam) throws Ex
178179
throw new BusinessException("用户已禁用");
179180
}
180181
// 密码加密处理
181-
String encryptOldPassword = PasswordUtil.encrypt(oldPassword);
182+
String salt = sysUser.getSalt();
183+
String encryptOldPassword = PasswordUtil.encrypt(oldPassword, salt);
182184
if (!sysUser.getPassword().equals(encryptOldPassword)) {
183185
throw new BusinessException("原密码错误");
184186
}
185187
// 新密码加密
186-
String encryptNewPassword = PasswordUtil.encrypt(newPassword);
188+
String encryptNewPassword = PasswordUtil.encrypt(newPassword, salt);
187189

188190
// 修改密码
189191
sysUser.setPassword(encryptNewPassword)
@@ -196,6 +198,6 @@ public boolean updateSysUserHead(Long id, String headPath) throws Exception {
196198
SysUser sysUser = new SysUser()
197199
.setId(id)
198200
.setHead(headPath);
199-
return updateById(sysUser);
201+
return updateById(sysUser);
200202
}
201203
}

src/main/java/io/geekidea/springbootplus/util/PasswordUtil.java

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,22 @@
2828
*/
2929
@Slf4j
3030
public class PasswordUtil {
31-
private static final String KEY = "666666";
3231

33-
public static String encrypt(String pwd) {
32+
/**
33+
* 密码加盐,再加密
34+
*
35+
* @param pwd
36+
* @param salt
37+
* @return
38+
*/
39+
public static String encrypt(String pwd, String salt) {
3440
if (StringUtils.isBlank(pwd)) {
35-
return null;
41+
throw new IllegalArgumentException("密码不能为空");
3642
}
37-
return DigestUtils.sha256Hex(KEY + pwd);
43+
if (StringUtils.isBlank(salt)) {
44+
throw new IllegalArgumentException("盐值不能为空");
45+
}
46+
return DigestUtils.sha256Hex(pwd + salt);
3847
}
3948

4049
}

src/test/java/io/geekidea/springbootplus/test/PasswordUtilTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,17 +17,21 @@
1717
package io.geekidea.springbootplus.test;
1818

1919
import io.geekidea.springbootplus.util.PasswordUtil;
20+
import org.junit.Assert;
2021

2122
/**
2223
* 密码工具测试类
24+
*
2325
* @author geekidea
2426
* @date 2019-10-05
2527
**/
2628
public class PasswordUtilTest {
2729
public static void main(String[] args) {
2830
String password = "123456";
29-
String encryptPassword = PasswordUtil.encrypt(password);
31+
String salt = "666";
32+
String encryptPassword = PasswordUtil.encrypt(password, salt);
3033
System.out.println(encryptPassword);
3134
System.out.println(encryptPassword.length());
35+
Assert.assertEquals(encryptPassword, "3108d080e3d39b4b8ad567405fa878c7dc9a31768b37a8a2c7ec72f511bb66cb");
3236
}
3337
}

0 commit comments

Comments
 (0)