增加会员登录事件,对token处理优化
This commit is contained in:
parent
cc7d2c0c82
commit
eddcbc2ecb
@ -113,7 +113,7 @@ spring:
|
||||
props:
|
||||
#是否打印逻辑SQL语句和实际SQL语句,建议调试时打印,在生产环境关闭
|
||||
sql:
|
||||
show: false
|
||||
show: true
|
||||
|
||||
# 忽略鉴权url
|
||||
ignored:
|
||||
|
19
consumer/src/main/java/cn/lili/event/MemberLoginEvent.java
Normal file
19
consumer/src/main/java/cn/lili/event/MemberLoginEvent.java
Normal file
@ -0,0 +1,19 @@
|
||||
package cn.lili.event;
|
||||
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
|
||||
/**
|
||||
* 会员登录消息
|
||||
*
|
||||
* @author Chopper
|
||||
* @since 2020/11/17 7:13 下午
|
||||
*/
|
||||
public interface MemberLoginEvent {
|
||||
|
||||
/**
|
||||
* 会员登录
|
||||
*
|
||||
* @param member 会员
|
||||
*/
|
||||
void memberLogin(Member member);
|
||||
}
|
@ -11,7 +11,7 @@ import cn.lili.modules.member.entity.dos.Member;
|
||||
public interface MemberRegisterEvent {
|
||||
|
||||
/**
|
||||
* 会员登录
|
||||
* 会员注册
|
||||
*
|
||||
* @param member 会员
|
||||
*/
|
||||
|
25
consumer/src/main/java/cn/lili/event/impl/MemberExecute.java
Normal file
25
consumer/src/main/java/cn/lili/event/impl/MemberExecute.java
Normal file
@ -0,0 +1,25 @@
|
||||
package cn.lili.event.impl;
|
||||
|
||||
import cn.lili.event.MemberLoginEvent;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* 会员自身业务
|
||||
*
|
||||
* @author Chopper
|
||||
* @version v1.0
|
||||
* 2022-01-11 11:08
|
||||
*/
|
||||
@Service
|
||||
public class MemberExecute implements MemberLoginEvent {
|
||||
@Autowired
|
||||
private MemberService memberService;
|
||||
|
||||
@Override
|
||||
public void memberLogin(Member member) {
|
||||
memberService.updateById(member);
|
||||
}
|
||||
}
|
@ -1,6 +1,7 @@
|
||||
package cn.lili.listener;
|
||||
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import cn.lili.event.MemberLoginEvent;
|
||||
import cn.lili.event.MemberPointChangeEvent;
|
||||
import cn.lili.event.MemberRegisterEvent;
|
||||
import cn.lili.event.MemberWithdrawalEvent;
|
||||
@ -51,6 +52,12 @@ public class MemberMessageListener implements RocketMQListener<MessageExt> {
|
||||
@Autowired
|
||||
private List<MemberRegisterEvent> memberSignEvents;
|
||||
|
||||
/**
|
||||
* 会员注册
|
||||
*/
|
||||
@Autowired
|
||||
private List<MemberLoginEvent> memberLoginEvents;
|
||||
|
||||
|
||||
@Override
|
||||
public void onMessage(MessageExt messageExt) {
|
||||
@ -69,6 +76,21 @@ public class MemberMessageListener implements RocketMQListener<MessageExt> {
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case MEMBER_LOGIN:
|
||||
|
||||
for (MemberLoginEvent memberLoginEvent : memberLoginEvents) {
|
||||
try {
|
||||
Member member = JSONUtil.toBean(new String(messageExt.getBody()), Member.class);
|
||||
memberLoginEvent.memberLogin(member);
|
||||
} catch (Exception e) {
|
||||
log.error("会员{},在{}业务中,状态修改事件执行异常",
|
||||
new String(messageExt.getBody()),
|
||||
memberLoginEvent.getClass().getName(),
|
||||
e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
//会员签到
|
||||
case MEMBER_SING:
|
||||
MemberSign memberSign = JSONUtil.toBean(new String(messageExt.getBody()), MemberSign.class);
|
||||
|
@ -115,8 +115,7 @@ public enum ResultCode {
|
||||
USER_AUTH_EXPIRED(20004, "用户已退出,请重新登录"),
|
||||
USER_AUTHORITY_ERROR(20005, "权限不足"),
|
||||
USER_CONNECT_LOGIN_ERROR(20006, "未找到登录信息"),
|
||||
USER_NAME_EXIST(20007, "该用户名已被注册"),
|
||||
USER_PHONE_EXIST(20008, "该手机号已被注册"),
|
||||
USER_EXIST(20008, "该用户名或手机号已被注册"),
|
||||
USER_PHONE_NOT_EXIST(20009, "手机号不存在"),
|
||||
USER_PASSWORD_ERROR(20010, "密码不正确"),
|
||||
USER_NOT_PHONE(20011, "非当前用户的手机号"),
|
||||
|
@ -16,11 +16,11 @@ public abstract class AbstractTokenGenerate {
|
||||
/**
|
||||
* 生成token
|
||||
*
|
||||
* @param username 用户名
|
||||
* @param user 用户名
|
||||
* @param longTerm 是否长时间有效
|
||||
* @return TOKEN对象
|
||||
*/
|
||||
public abstract Token createToken(String username, Boolean longTerm);
|
||||
public abstract Token createToken(Object user, Boolean longTerm);
|
||||
|
||||
/**
|
||||
* 刷新token
|
||||
|
@ -87,7 +87,7 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
this.remove(queryWrapper);
|
||||
throw new NoPermissionException("未绑定用户");
|
||||
}
|
||||
return memberTokenGenerate.createToken(member.getUsername(), longTerm);
|
||||
return memberTokenGenerate.createToken(member, longTerm);
|
||||
} catch (NoPermissionException e) {
|
||||
throw e;
|
||||
}
|
||||
@ -222,7 +222,7 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
//如果不存在会员,则进行绑定微信openid 和 unionid,并且登录
|
||||
if (member != null) {
|
||||
bindMpMember(openId, unionId, member);
|
||||
return memberTokenGenerate.createToken(member.getUsername(), true);
|
||||
return memberTokenGenerate.createToken(member, true);
|
||||
}
|
||||
|
||||
//如果没有会员,则根据手机号注册会员
|
||||
@ -230,7 +230,7 @@ public class ConnectServiceImpl extends ServiceImpl<ConnectMapper, Connect> impl
|
||||
memberService.save(newMember);
|
||||
newMember = memberService.findByUsername(newMember.getUsername());
|
||||
bindMpMember(openId, unionId, newMember);
|
||||
return memberTokenGenerate.createToken(newMember.getUsername(), true);
|
||||
return memberTokenGenerate.createToken(newMember, true);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -17,6 +17,7 @@ import cn.lili.common.security.token.Token;
|
||||
import cn.lili.common.sensitive.SensitiveWordsFilter;
|
||||
import cn.lili.common.utils.BeanUtil;
|
||||
import cn.lili.common.utils.CookieUtil;
|
||||
import cn.lili.common.utils.SnowFlake;
|
||||
import cn.lili.common.utils.UuidUtils;
|
||||
import cn.lili.common.vo.PageVO;
|
||||
import cn.lili.modules.connect.config.ConnectAuthEnum;
|
||||
@ -143,7 +144,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
// throw new ServiceException(ResultCode.USER_PASSWORD_ERROR);
|
||||
// }
|
||||
// loginBindUser(member);
|
||||
return memberTokenGenerate.createToken(member.getUsername(), false);
|
||||
return memberTokenGenerate.createToken(member, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -168,7 +169,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
throw new ServiceException(ResultCode.USER_NOT_EXIST);
|
||||
}
|
||||
|
||||
return storeTokenGenerate.createToken(member.getUsername(), false);
|
||||
return storeTokenGenerate.createToken(member, false);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -196,12 +197,10 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
String username = UuidUtils.getUUID();
|
||||
Member member = new Member(username, UuidUtils.getUUID(), authUser.getAvatar(), authUser.getNickname(),
|
||||
authUser.getGender() != null ? Convert.toInt(authUser.getGender().getCode()) : 0);
|
||||
//保存会员
|
||||
this.save(member);
|
||||
Member loadMember = this.findByUsername(username);
|
||||
registerHandler(member);
|
||||
//绑定登录方式
|
||||
loginBindUser(loadMember, authUser.getUuid(), authUser.getSource());
|
||||
return memberTokenGenerate.createToken(username, false);
|
||||
loginBindUser(member, authUser.getUuid(), authUser.getSource());
|
||||
return memberTokenGenerate.createToken(member, false);
|
||||
} catch (ServiceException e) {
|
||||
log.error("自动注册服务泡出异常:", e);
|
||||
throw e;
|
||||
@ -235,13 +234,23 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
//如果手机号不存在则自动注册用户
|
||||
if (member == null) {
|
||||
member = new Member(mobilePhone, UuidUtils.getUUID(), mobilePhone);
|
||||
//保存会员
|
||||
this.save(member);
|
||||
String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_REGISTER.name();
|
||||
rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
|
||||
registerHandler(member);
|
||||
}
|
||||
loginBindUser(member);
|
||||
return memberTokenGenerate.createToken(member.getUsername(), false);
|
||||
return memberTokenGenerate.createToken(member, false);
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册方法抽象
|
||||
*
|
||||
* @param member
|
||||
*/
|
||||
private void registerHandler(Member member) {
|
||||
member.setId(SnowFlake.getIdStr());
|
||||
//保存会员
|
||||
this.save(member);
|
||||
String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_REGISTER.name();
|
||||
rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -281,13 +290,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
//设置会员信息
|
||||
Member member = new Member(userName, new BCryptPasswordEncoder().encode(password), mobilePhone);
|
||||
//注册成功后用户自动登录
|
||||
if (this.save(member)) {
|
||||
Token token = memberTokenGenerate.createToken(member.getUsername(), false);
|
||||
String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_REGISTER.name();
|
||||
rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
|
||||
return token;
|
||||
}
|
||||
return null;
|
||||
registerHandler(member);
|
||||
Token token = memberTokenGenerate.createToken(member, false);
|
||||
return token;
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -331,9 +336,7 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
|
||||
//添加会员
|
||||
Member member = new Member(memberAddDTO.getUsername(), new BCryptPasswordEncoder().encode(memberAddDTO.getPassword()), memberAddDTO.getMobile());
|
||||
this.save(member);
|
||||
String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_REGISTER.name();
|
||||
rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
|
||||
registerHandler(member);
|
||||
return member;
|
||||
}
|
||||
|
||||
@ -430,10 +433,11 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
* @param mobilePhone 手机号
|
||||
* @return 会员
|
||||
*/
|
||||
private Member findByPhone(String mobilePhone) {
|
||||
private List<Member> findMember(String mobilePhone, String userName) {
|
||||
QueryWrapper<Member> queryWrapper = new QueryWrapper<>();
|
||||
queryWrapper.eq("mobile", mobilePhone);
|
||||
return this.baseMapper.selectOne(queryWrapper);
|
||||
queryWrapper.eq("mobile", mobilePhone)
|
||||
.or().eq("username", userName);
|
||||
return this.baseMapper.selectList(queryWrapper);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -589,13 +593,9 @@ public class MemberServiceImpl extends ServiceImpl<MemberMapper, Member> impleme
|
||||
* @param mobilePhone 手机号
|
||||
*/
|
||||
private void checkMember(String userName, String mobilePhone) {
|
||||
//判断用户名是否存在
|
||||
if (findByUsername(userName) != null) {
|
||||
throw new ServiceException(ResultCode.USER_NAME_EXIST);
|
||||
}
|
||||
//判断手机号是否存在
|
||||
if (findByPhone(mobilePhone) != null) {
|
||||
throw new ServiceException(ResultCode.USER_PHONE_EXIST);
|
||||
if (findMember(userName, mobilePhone) != null) {
|
||||
throw new ServiceException(ResultCode.USER_EXIST);
|
||||
}
|
||||
}
|
||||
}
|
@ -1,5 +1,6 @@
|
||||
package cn.lili.modules.member.token;
|
||||
|
||||
import cn.lili.common.properties.RocketmqCustomProperties;
|
||||
import cn.lili.common.security.AuthUser;
|
||||
import cn.lili.common.security.enums.UserEnums;
|
||||
import cn.lili.common.security.token.Token;
|
||||
@ -9,6 +10,9 @@ import cn.lili.common.context.ThreadContextHolder;
|
||||
import cn.lili.common.enums.ClientTypeEnum;
|
||||
import cn.lili.modules.member.entity.dos.Member;
|
||||
import cn.lili.modules.member.service.MemberService;
|
||||
import cn.lili.rocketmq.RocketmqSendCallbackBuilder;
|
||||
import cn.lili.rocketmq.tags.MemberTagsEnum;
|
||||
import org.apache.rocketmq.spring.core.RocketMQTemplate;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
@ -28,11 +32,16 @@ public class MemberTokenGenerate extends AbstractTokenGenerate {
|
||||
private MemberService memberService;
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
@Autowired
|
||||
private RocketmqCustomProperties rocketmqCustomProperties;
|
||||
|
||||
@Autowired
|
||||
private RocketMQTemplate rocketMQTemplate;
|
||||
|
||||
@Override
|
||||
public Token createToken(String username, Boolean longTerm) {
|
||||
public Token createToken(Object user, Boolean longTerm) {
|
||||
|
||||
Member member = memberService.findByUsername(username);
|
||||
Member member = (Member) user;
|
||||
|
||||
//获取客户端类型
|
||||
String clientType = ThreadContextHolder.getHttpRequest().getHeader("clientType");
|
||||
@ -50,11 +59,12 @@ public class MemberTokenGenerate extends AbstractTokenGenerate {
|
||||
//记录最后登录时间,客户端类型
|
||||
member.setLastLoginDate(new Date());
|
||||
member.setClientEnum(clientTypeEnum.name());
|
||||
memberService.updateById(member);
|
||||
String destination = rocketmqCustomProperties.getMemberTopic() + ":" + MemberTagsEnum.MEMBER_LOGIN.name();
|
||||
rocketMQTemplate.asyncSend(destination, member, RocketmqSendCallbackBuilder.commonCallback());
|
||||
|
||||
AuthUser authUser = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), member.getFace(), UserEnums.MEMBER);
|
||||
//登陆成功生成token
|
||||
return tokenUtil.createToken(username, authUser, longTerm, UserEnums.MEMBER);
|
||||
return tokenUtil.createToken(member.getUsername(), authUser, longTerm, UserEnums.MEMBER);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -32,20 +32,20 @@ public class StoreTokenGenerate extends AbstractTokenGenerate {
|
||||
private TokenUtil tokenUtil;
|
||||
|
||||
@Override
|
||||
public Token createToken(String username, Boolean longTerm) {
|
||||
public Token createToken(Object user, Boolean longTerm) {
|
||||
//生成token
|
||||
Member member = memberService.findByUsername(username);
|
||||
Member member = (Member) user;
|
||||
if (!member.getHaveStore()) {
|
||||
throw new ServiceException(ResultCode.STORE_NOT_OPEN);
|
||||
}
|
||||
LambdaQueryWrapper<Store> queryWrapper = new LambdaQueryWrapper<>();
|
||||
queryWrapper.eq(Store::getMemberId, member.getId());
|
||||
Store store = storeService.getOne(queryWrapper);
|
||||
AuthUser user = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), store.getStoreLogo(), UserEnums.STORE);
|
||||
AuthUser authUser = new AuthUser(member.getUsername(), member.getId(), member.getNickName(), store.getStoreLogo(), UserEnums.STORE);
|
||||
|
||||
user.setStoreId(store.getId());
|
||||
user.setStoreName(store.getStoreName());
|
||||
return tokenUtil.createToken(username, user, longTerm, UserEnums.STORE);
|
||||
authUser.setStoreId(store.getId());
|
||||
authUser.setStoreName(store.getStoreName());
|
||||
return tokenUtil.createToken(member.getUsername(), authUser, longTerm, UserEnums.STORE);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -119,7 +119,7 @@ public class AdminUserServiceImpl extends ServiceImpl<AdminUserMapper, AdminUser
|
||||
throw new ServiceException(ResultCode.USER_PASSWORD_ERROR);
|
||||
}
|
||||
try {
|
||||
return managerTokenGenerate.createToken(username, false);
|
||||
return managerTokenGenerate.createToken(adminUser, false);
|
||||
} catch (Exception e) {
|
||||
log.error("管理员登录错误", e);
|
||||
}
|
||||
|
@ -31,8 +31,6 @@ import java.util.Map;
|
||||
@Component
|
||||
public class ManagerTokenGenerate extends AbstractTokenGenerate {
|
||||
|
||||
@Autowired
|
||||
private AdminUserService adminUserService;
|
||||
@Autowired
|
||||
private TokenUtil tokenUtil;
|
||||
@Autowired
|
||||
@ -42,17 +40,17 @@ public class ManagerTokenGenerate extends AbstractTokenGenerate {
|
||||
|
||||
|
||||
@Override
|
||||
public Token createToken(String username, Boolean longTerm) {
|
||||
public Token createToken(Object user, Boolean longTerm) {
|
||||
//生成token
|
||||
AdminUser adminUser = adminUserService.findByUsername(username);
|
||||
AuthUser user = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper());
|
||||
AdminUser adminUser = (AdminUser) user;
|
||||
AuthUser authUser = new AuthUser(adminUser.getUsername(), adminUser.getId(), adminUser.getAvatar(), UserEnums.MANAGER, adminUser.getNickName(), adminUser.getIsSuper());
|
||||
|
||||
|
||||
List<UserMenuVO> userMenuVOList = roleMenuService.findAllMenu(user.getId());
|
||||
List<UserMenuVO> userMenuVOList = roleMenuService.findAllMenu(authUser.getId());
|
||||
//缓存权限列表
|
||||
cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.MANAGER) + user.getId(), this.permissionList(userMenuVOList));
|
||||
cache.put(CachePrefix.PERMISSION_LIST.getPrefix(UserEnums.MANAGER) + authUser.getId(), this.permissionList(userMenuVOList));
|
||||
|
||||
return tokenUtil.createToken(username, user, longTerm, UserEnums.MANAGER);
|
||||
return tokenUtil.createToken(adminUser.getUsername(), authUser, longTerm, UserEnums.MANAGER);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -11,6 +11,10 @@ public enum MemberTagsEnum {
|
||||
* 会员注册
|
||||
*/
|
||||
MEMBER_REGISTER("会员注册"),
|
||||
/**
|
||||
* 会员注册
|
||||
*/
|
||||
MEMBER_LOGIN("会员登录"),
|
||||
/**
|
||||
* 会员签到
|
||||
*/
|
||||
|
Loading…
x
Reference in New Issue
Block a user