一、实现单点登录
有关单点登录的讲解在我的博客中:
1、创建用户表
CREATE TABLE `ucenter_member` ( `id` char(19) NOT NULL COMMENT '会员id', `openid` varchar(128) DEFAULT NULL COMMENT '微信openid', `mobile` varchar(11) DEFAULT '' COMMENT '手机号', `password` varchar(255) DEFAULT NULL COMMENT '密码', `nickname` varchar(50) DEFAULT NULL COMMENT '昵称', `sex` tinyint(2) unsigned DEFAULT NULL COMMENT '性别 1 女,2 男', `age` tinyint(3) unsigned DEFAULT NULL COMMENT '年龄', `avatar` varchar(255) DEFAULT NULL COMMENT '用户头像', `sign` varchar(100) DEFAULT NULL COMMENT '用户签名', `is_disabled` tinyint(1) NOT NULL DEFAULT '0' COMMENT '是否禁用 1(true)已禁用, 0(false)未禁用', `is_deleted` tinyint(1) NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除, 0(false)未删除', `gmt_create` datetime NOT NULL COMMENT '创建时间', `gmt_modified` datetime NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='会员表';
2、使用代码生成器,生成逻辑代码的框架
3、controller
将生成的token返回给前端。
@RestController @RequestMapping("/educenter/member") @CrossOrigin public class UcenterMemberController { @Autowired private UcenterMemberService ucenterMemberService; /** * 登录 * @param ucenterMember * @return */ @PostMapping("/login") public R ucenterLogin(@RequestBody UcenterMember ucenterMember){ //返回token,使用jwt生成 String token = ucenterMemberService.login(ucenterMember); return R.ok().data("token", token); } }
4、service
public interface UcenterMemberService extends IService<UcenterMember> { /** * 登录 * @param ucenterMember * @return */ String login(UcenterMember ucenterMember); }
5、serviceImpl
使用JWT生成token。
@Service public class UcenterMemberServiceImpl extends ServiceImpl<UcenterMemberMapper, UcenterMember> implements UcenterMemberService { @Override public String login(UcenterMember ucenterMember) { String mobile = ucenterMember.getMobile(); String password = ucenterMember.getPassword(); QueryWrapper<UcenterMember> queryWrapper = new QueryWrapper<>(); queryWrapper.eq("mobile", mobile); UcenterMember mobileMember = baseMapper.selectOne(queryWrapper); if (mobileMember == null){ //没有这个手机号 throw new GuliException(20001, "登录失败"); } //判断密码,将用户传入的密码进行MD5加密,然后跟数据库中密码比较 if (!MD5.encrypt(password).equals(mobileMember.getPassword())){ throw new GuliException(20001, "密码错误"); } //判断用户是否被禁用 if (mobileMember.getIsDeleted()){ throw new GuliException(20001, "用户被禁用"); } //登录成功 //生成token //要使用查出来的mobileMember,因为用户传入的ucenterMember中没有id只有手机号 String token = JwtUtils.getJwtToken(mobileMember.getId(), mobileMember.getPassword()); return token; } }