若依实现微信小程序登录&APP登录
- 前言
- 搭建若依项目
- APP登录
-
- 1.数据库创建新的用户表
- 2.创建AppUser实体类
- 3.创建 AppUserMapper.xml 映射文件
- 4.创建 AppUserMapper 数据层
- 5.创建 IAppUserService 业务层
- 6.创建 AppUserServiceImpl 业务实现层
- 7.创建 LoginAppUser 登录用户身份权限类
- 8.创建 LoginAppBody 用户登录对象类
- 9.添加通用常量信息 Constants & CacheConstants 常量信息
- 10.创建 AppTokenService TOKEN处理类
- 11.创建 AppLoginService 登录校验方法类
- 12.修改JwtAuthenticationTokenFilter token过滤器 验证token有效性
- 13.安全服务工具类 SecurityUtils 添加信息
- 14.web层通用数据类 BaseController 添加信息
- 15.创建 AppLoginController 控制器
- 16.SecurityConfig添加匿名访问地址
- 17.测试接口
- 小程序登录
- 谢谢您的耐心观看,点赞 收藏 转发 是对我最大的支持
前言
近期公司有项目要做微信小程序和app的项目,为了快速开发采用若依框架,本文使用的若依框架版本为3.8.8,当前时间为2024年8月是若依最新版本。
在原有的后台管理系统登录流程上,新增新的登录接口用于小程序或APP登录,创建新的用户表,新的token认证登,与原有的后台管理系统登录流程分开,流程更清晰,逻辑更严谨。
本文需要对SpringSecurity+jwt的认证流程有一定的了解,如果不了解单纯复制粘贴也可以实现,但是你会看的很难受,建议还是学一学。
使用lombok快速生成get,set方法
在我的项目中修改了项目名,ruoyi改成了app,大家对照目录的时候注意
搭建若依项目
参照官方文档搭建即可 若依分离版官方文档
APP登录
1.数据库创建新的用户表
创建表
CREATE TABLE `app_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`user_name` varchar(30) NOT NULL COMMENT '用户账号',
`nick_name` varchar(30) COMMENT '用户昵称',
`email` varchar(50) DEFAULT '' COMMENT '用户邮箱',
`mobile` varchar(11) CHARACTER SET utf8mb3 COLLATE utf8mb3_general_ci DEFAULT '' COMMENT '手机号码',
`sex` char(1) DEFAULT '0' COMMENT '用户性别(0男 1女 2未知)',
`avatar` varchar(100) DEFAULT '' COMMENT '头像地址',
`password` varchar(100) DEFAULT '' COMMENT '密码',
`salt` varchar(50) DEFAULT '' COMMENT '盐',
`status` char(1) DEFAULT '0' COMMENT '帐号状态(0正常 1停用)',
`del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0代表存在 2代表删除)',
`login_ip` varchar(128) DEFAULT '' COMMENT '最后登录IP',
`login_date` datetime DEFAULT NULL COMMENT '最后登录时间',
`create_by` varchar(64) DEFAULT '' COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` varchar(64) DEFAULT '' COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(500) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户信息表';
插入测试数据
insert into `app_user`(`user_id`,`user_name`,`nick_name`,`email`,`mobile`,`sex`,`avatar`,`password`,`salt`,`status`,`del_flag`,`login_ip`,`login_date`,`create_by`,`create_time`,`update_by`,`update_time`,`remark`) values (1,'xing','星哥','123456@163.com','19999999999','1','','bb6d30fe528388b8f08631afb5a22c5c','GoEskKGp','0','0','192.168.3.4','2024-08-13 09:48:46','管理员','2024-08-13 09:24:06','用户注册创建','2024-08-13 09:24:06','测试app账号');
2.创建AppUser实体类
此实体类为上述数据库表AppUser用户表实体类
注意:与 SysUser 同级目录
创建目录:ruoyi-common——>src——>main——>java——>com.ruoyi.common——>core——>domian——>entity
package com.app.common.core.domain.entity;
import com.app.common.core.domain.BaseEntity;
import lombok.Data;
import java.util.Date;
/**
* 用户对象 app_user
*/
@Data
public class AppUser extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 用户ID
*/
private Long userId;
/**
* 用户账号
*/
private String userName;
/**
* 用户昵称
*/
private String nickName;
/**
* 用户邮箱
*/
private String email;
/**
* 手机号码
*/
private String mobile;
/**
* 用户性别(0=男,1=女,2=未知)
*/
private String sex;
/**
* 用户头像
*/
private String avatar;
/**
* 密码
*/
private String password;
/**
* 盐
*/
private String salt;
/**
* 帐号状态(0=正常,1=停用)
*/
private String status;
/**
* 删除标志(0代表存在 2代表删除)
*/
private String delFlag;
/**
* 最后登录IP
*/
private String loginIp;
/**
* 最后登录时间
*/
private Date loginDate;
}
3.创建 AppUserMapper.xml 映射文件
目录:ruoyi-system——>src——>main——>resources——>mapper.system
注意:与 SysUserMapper.xml 同级目录
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.app.system.mapper.AppUserMapper">
<resultMap type="AppUser" id="AppUserResult">
<id property="userId" column="user_id"/>
<result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/>
<result property="email" column="email"/>
<result property="mobile" column="mobile"/>
<result property="sex" column="sex"/>
<result property="avatar" column="avatar"/>
<result property="password" column="password"/>
<result property="salt" column="salt"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="loginIp" column="login_ip"/>
<result property="loginDate" column="login_date"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<sql id="selectAppUserVo">
select user_id, user_name, nick_name, email, avatar, mobile, password, salt, sex, status, del_flag, login_ip, login_date, create_by, create_time, remark from app_user
</sql>
<select id="selectAppUserByUserName" parameterType="String" resultMap="AppUserResult">
<include refid="selectAppUserVo"/>
where user_name = #{userName} and del_flag = '0'
</select>
<update id="updateAppUser" parameterType="AppUser">
update app_user
<set>
<if test="userName != null and userName != ''">user_name = #{userName},</if>
<if test="nickName != null and nickName != ''">nick_name = #{nickName},</if>
<if test="email != null ">email = #{email},</if>
<if test="mobile != null ">mobile = #{mobile},</if>
<if test="sex != null and sex != ''">sex = #{sex},</if>
<if test="avatar != null and avatar != ''">avatar = #{avatar},</if>
<if test="password != null and password != ''">password = #{password},</if>
<if test="salt != null and salt != ''">salt = #{salt},</if>
<if test="status != null and status != ''">status = #{status},</if>
<if test="loginIp != null and loginIp != ''">login_ip = #{loginIp},</if>
<if test="loginDate != null">login_date = #{loginDate},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
<if test="remark != null">remark = #{remark},