Skip to content

Commit 1299f94

Browse files
Merge pull request #65 from geekidea/dev
🇨🇳 1.3.0.RELEASE shiro+jwt
2 parents 3fe79cc + 09f15cb commit 1299f94

36 files changed

+432
-231
lines changed

src/main/java/io/geekidea/springbootplus/common/entity/BaseEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import java.io.Serializable;
2222

2323
/**
24+
* 实体父类
2425
* @author geekidea
2526
* @date 2018-11-08
2627
*/

src/main/java/io/geekidea/springbootplus/shiro/cache/impl/LoginRedisServiceImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import io.geekidea.springbootplus.shiro.vo.JwtTokenRedisVo;
2323
import io.geekidea.springbootplus.shiro.vo.LoginSysUserRedisVo;
2424
import io.geekidea.springbootplus.shiro.vo.LoginSysUserVo;
25+
import io.geekidea.springbootplus.system.convert.SysUserConvert;
2526
import io.geekidea.springbootplus.util.ClientInfoUtil;
2627
import io.geekidea.springbootplus.util.HttpServletRequestUtil;
2728
import org.apache.commons.codec.digest.DigestUtils;
@@ -84,7 +85,7 @@ public void cacheLoginInfo(JwtToken jwtToken, LoginSysUserVo loginSysUserVo, boo
8485

8586
// Redis缓存登陆用户信息
8687
// 将LoginSysUserVo对象复制到LoginSysUserRedisVo,使用mapstruct进行对象属性复制
87-
LoginSysUserRedisVo loginSysUserRedisVo = ShiroMapstructConvert.INSTANCE.loginSysUserVoToLoginSysUserRedisVo(loginSysUserVo);
88+
LoginSysUserRedisVo loginSysUserRedisVo = SysUserConvert.INSTANCE.loginSysUserVoToLoginSysUserRedisVo(loginSysUserVo);
8889
loginSysUserRedisVo.setSalt(salt);
8990
loginSysUserRedisVo.setClientInfo(clientInfo);
9091

src/main/java/io/geekidea/springbootplus/shiro/convert/ShiroMapstructConvert.java

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515

1616
import io.geekidea.springbootplus.shiro.jwt.JwtToken;
1717
import io.geekidea.springbootplus.shiro.vo.JwtTokenRedisVo;
18-
import io.geekidea.springbootplus.shiro.vo.LoginSysUserRedisVo;
19-
import io.geekidea.springbootplus.shiro.vo.LoginSysUserVo;
2018
import org.mapstruct.Mapper;
2119
import org.mapstruct.factory.Mappers;
2220

@@ -32,14 +30,6 @@ public interface ShiroMapstructConvert {
3230

3331
ShiroMapstructConvert INSTANCE = Mappers.getMapper(ShiroMapstructConvert.class);
3432

35-
/**
36-
* LoginSysUserVo对象转换成LoginSysUserRedisVo
37-
*
38-
* @param loginSysUserVo
39-
* @return
40-
*/
41-
LoginSysUserRedisVo loginSysUserVoToLoginSysUserRedisVo(LoginSysUserVo loginSysUserVo);
42-
4333
/**
4434
* JwtToken对象转换成JwtTokenRedisVo
4535
*

src/main/java/io/geekidea/springbootplus/shiro/jwt/JwtRealm.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@
2828
import org.apache.shiro.subject.PrincipalCollection;
2929

3030
/**
31-
* Shiro JST授权认证
31+
* Shiro 授权认证
3232
*
3333
* @author geekidea
3434
* @date 2019-09-27

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

Lines changed: 25 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030
import io.geekidea.springbootplus.shiro.util.SaltUtil;
3131
import io.geekidea.springbootplus.shiro.vo.LoginSysUserRedisVo;
3232
import io.geekidea.springbootplus.shiro.vo.LoginSysUserVo;
33+
import io.geekidea.springbootplus.system.convert.SysUserConvert;
34+
import io.geekidea.springbootplus.system.entity.SysUser;
35+
import io.geekidea.springbootplus.system.mapper.SysUserMapper;
36+
import io.geekidea.springbootplus.util.PasswordUtil;
3337
import io.swagger.annotations.Api;
3438
import lombok.extern.slf4j.Slf4j;
3539
import org.apache.commons.collections4.SetUtils;
@@ -67,25 +71,36 @@ public class LoginServiceImpl implements LoginService {
6771
@Autowired
6872
private JwtProperties jwtProperties;
6973

74+
@Autowired
75+
private SysUserMapper sysUserMapper;
76+
7077
@Override
7178
public ApiResult login(LoginParam loginParam, HttpServletResponse response) {
7279
String username = loginParam.getUsername();
73-
// TODO 从数据库中获取登陆用户信息
74-
LoginSysUserVo loginSysUserVo = new LoginSysUserVo()
75-
.setId(1L)
76-
.setUsername(loginParam.getUsername())
77-
.setSalt("666") // 可选
78-
.setRoles(SetUtils.hashSet("admin"));
79-
80-
if (loginSysUserVo == null) {
80+
// 从数据库中获取登陆用户信息
81+
SysUser sysUser = sysUserMapper.getSysUserByUsername(username);
82+
if (sysUser == null) {
8183
log.error("登陆失败,loginParam:{}", loginParam);
8284
return ApiResult.fail(ApiCode.LOGIN_EXCEPTION);
8385
}
86+
// 实际项目中,前端传过来的密码应先加密
87+
// 原始密码:123456
88+
// 加密规则:sha256(666666+123456) = 751ade2f90ceb660cb2460f12cc6fe08268e628e4607bdb88a00605b3d66973c
89+
String encryptPassword = PasswordUtil.encrypt(loginParam.getPassword());
90+
if (!encryptPassword.equals(sysUser.getPassword())) {
91+
log.error("用户名或密码错误");
92+
return ApiResult.fail(ApiCode.LOGIN_EXCEPTION);
93+
}
94+
// 将系统用户对象转换成登陆用户对象
95+
LoginSysUserVo loginSysUserVo = SysUserConvert.INSTANCE.sysUserToLoginSysUserVo(sysUser);
96+
// TODO 从数据库中获取登陆用户角色权限信息
97+
loginSysUserVo.setRoles(SetUtils.hashSet("admin"));
98+
8499
String newSalt;
85-
if (jwtProperties.isSaltCheck()){
100+
if (jwtProperties.isSaltCheck()) {
86101
// 包装盐值
87102
newSalt = SaltUtil.getSalt(jwtProperties.getSecret(), loginSysUserVo.getSalt());
88-
}else{
103+
} else {
89104
newSalt = jwtProperties.getSecret();
90105
}
91106
// 删除登陆用户盐值,盐值保存到后台Redis缓存中

src/main/java/io/geekidea/springbootplus/shiro/util/SaltUtil.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,9 @@
1414
package io.geekidea.springbootplus.shiro.util;
1515

1616
import org.apache.commons.codec.digest.DigestUtils;
17+
import org.apache.commons.lang3.RandomUtils;
1718
import org.apache.commons.lang3.StringUtils;
19+
import org.apache.shiro.crypto.SecureRandomNumberGenerator;
1820

1921
/**
2022
* 盐值包装工具类
@@ -40,4 +42,15 @@ public static String getSalt(String secret, String salt) {
4042
String newSalt = DigestUtils.sha256Hex(secret + salt);
4143
return newSalt;
4244
}
45+
46+
/**
47+
* 生成32位随机盐
48+
*
49+
* @return
50+
*/
51+
public static String generateSalt() {
52+
return new SecureRandomNumberGenerator().nextBytes(16).toHex();
53+
}
54+
4355
}
56+
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
/*
2+
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
3+
* Licensed under the Apache License, Version 2.0 (the "License");
4+
* you may not use this file except in compliance with the License.
5+
* You may obtain a copy of the License at
6+
* http://www.apache.org/licenses/LICENSE-2.0
7+
* Unless required by applicable law or agreed to in writing, software
8+
* distributed under the License is distributed on an "AS IS" BASIS,
9+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
10+
* See the License for the specific language governing permissions and
11+
* limitations under the License.
12+
*/
13+
14+
package io.geekidea.springbootplus.system.convert;
15+
16+
import io.geekidea.springbootplus.shiro.vo.LoginSysUserRedisVo;
17+
import io.geekidea.springbootplus.shiro.vo.LoginSysUserVo;
18+
import io.geekidea.springbootplus.system.entity.SysUser;
19+
import org.mapstruct.Mapper;
20+
import org.mapstruct.factory.Mappers;
21+
22+
/**
23+
* @author geekidea
24+
* @date 2019-10-05
25+
**/
26+
@Mapper
27+
public interface SysUserConvert {
28+
29+
SysUserConvert INSTANCE = Mappers.getMapper(SysUserConvert.class);
30+
31+
/**
32+
* 系统用户实体对象转换成登陆用户VO对象
33+
* @param sysUser
34+
* @return
35+
*/
36+
LoginSysUserVo sysUserToLoginSysUserVo(SysUser sysUser);
37+
38+
/**
39+
* LoginSysUserVo对象转换成LoginSysUserRedisVo
40+
*
41+
* @param loginSysUserVo
42+
* @return
43+
*/
44+
LoginSysUserRedisVo loginSysUserVoToLoginSysUserRedisVo(LoginSysUserVo loginSysUserVo);
45+
46+
}

src/main/java/io/geekidea/springbootplus/system/entity/SysLog.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,27 @@
11
package io.geekidea.springbootplus.system.entity;
22

33
import com.baomidou.mybatisplus.annotation.IdType;
4+
import java.util.Date;
45
import com.baomidou.mybatisplus.annotation.TableId;
56
import io.geekidea.springbootplus.common.entity.BaseEntity;
67
import io.swagger.annotations.ApiModel;
78
import io.swagger.annotations.ApiModelProperty;
89
import lombok.Data;
910
import lombok.EqualsAndHashCode;
10-
11-
import java.util.Date;
11+
import lombok.experimental.Accessors;
1212

1313
/**
1414
* <p>
1515
* 系统日志
1616
* </p>
1717
*
1818
* @author geekidea
19-
* @since 2019-08-04
19+
* @since 2019-10-05
2020
*/
2121
@Data
22+
@Accessors(chain = true)
2223
@EqualsAndHashCode(callSuper = true)
23-
@ApiModel(value="SysLog对象", description="系统日志")
24+
@ApiModel(value = "SysLog对象", description = "系统日志")
2425
public class SysLog extends BaseEntity {
2526

2627
private static final long serialVersionUID = 1L;

src/main/java/io/geekidea/springbootplus/system/entity/SysUser.java

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,44 +8,50 @@
88
import io.swagger.annotations.ApiModelProperty;
99
import lombok.Data;
1010
import lombok.EqualsAndHashCode;
11-
12-
import java.util.Date;
11+
import lombok.experimental.Accessors;
1312

1413
/**
1514
* <p>
1615
* SystemUser
1716
* </p>
1817
*
1918
* @author geekidea
20-
* @since 2019-08-26
19+
* @since 2019-10-05
2120
*/
2221
@Data
22+
@Accessors(chain = true)
2323
@EqualsAndHashCode(callSuper = true)
24-
@ApiModel(value="SysUser对象", description="SystemUser")
24+
@ApiModel(value = "SysUser对象", description = "SystemUser")
2525
public class SysUser extends BaseEntity {
2626

2727
private static final long serialVersionUID = 1L;
2828

29-
@ApiModelProperty(value = "id")
29+
@ApiModelProperty(value = "主键")
3030
@TableId(value = "id", type = IdType.ID_WORKER)
3131
private Long id;
3232

33-
@ApiModelProperty(value = "name")
34-
private String name;
33+
@ApiModelProperty(value = "用户名")
34+
private String username;
3535

36-
@ApiModelProperty(value = "account")
37-
private String account;
36+
@ApiModelProperty(value = "昵称")
37+
private String nickname;
3838

39-
@ApiModelProperty(value = "password")
40-
private String pwd;
39+
@ApiModelProperty(value = "密码")
40+
private String password;
41+
42+
@ApiModelProperty(value = "盐值")
43+
private String salt;
4144

4245
@ApiModelProperty(value = "remark")
4346
private String remark;
4447

45-
@ApiModelProperty(value = "create time")
48+
@ApiModelProperty(value = "状态,0:禁用,1:启用")
49+
private Integer status;
50+
51+
@ApiModelProperty(value = "创建时间")
4652
private Date createTime;
4753

48-
@ApiModelProperty(value = "update time")
54+
@ApiModelProperty(value = "修改时间")
4955
private Date updateTime;
5056

5157
}

src/main/java/io/geekidea/springbootplus/system/mapper/SysLogMapper.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,24 +17,26 @@
1717
* </p>
1818
*
1919
* @author geekidea
20-
* @since 2019-08-04
20+
* @since 2019-10-05
2121
*/
2222
@Repository
2323
public interface SysLogMapper extends BaseMapper<SysLog> {
2424

2525
/**
2626
* 根据ID获取查询对象
27+
*
2728
* @param id
2829
* @return
2930
*/
3031
SysLogQueryVo getSysLogById(Serializable id);
3132

3233
/**
3334
* 获取分页对象
35+
*
3436
* @param page
35-
* @param sysLogQueryParam
37+
* @param SysLogQueryParam
3638
* @return
3739
*/
38-
IPage<SysLogQueryVo> getSysLogPageList(@Param("page") Page page, @Param("param") SysLogQueryParam sysLogQueryParam);
40+
IPage<SysLogQueryVo> getSysLogPageList(@Param("page") Page page, @Param("param") SysLogQueryParam SysLogQueryParam);
3941

4042
}

0 commit comments

Comments
 (0)