浏览代码

等前端的安全令牌

fangqing 4 周之前
父节点
当前提交
ac70181e70

+ 7 - 6
ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysLoginController.java

@@ -120,9 +120,10 @@ public class SysLoginController {
     @RequestMapping("/appleLogin")
     public AjaxResult appleLogin(String identityToken) {
 
-
         // 解码后的消息体
         JSONObject playloadObj = IOSToeknUtils.parserIdentityToken(identityToken);
+        String appid = playloadObj.getString("email");
+        System.out.println(appid);
 
         System.out.println(playloadObj);
         Boolean success;
@@ -136,13 +137,13 @@ public class SysLoginController {
             // TODO 校验token失败具体操作
             return AjaxResult.error("登录失败");
         }
-
         // TODO 检验token成功具体业务操作。。。
-/*
-        String token = loginService.wxLogin(result);
+        String[] result = {appid};
+
+        String token = loginService.appleLogin(result);
         AjaxResult ajax = AjaxResult.success();
-        ajax.put(Constants.TOKEN, token);*/
-        return AjaxResult.success();
+        ajax.put(Constants.TOKEN, token);
+        return ajax;
     }
 
     /**

+ 10 - 0
ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java

@@ -423,6 +423,9 @@ public class SysUser extends BaseEntity {
     /** openId */
     private String openId;
 
+    /** appId */
+    private String appId;
+
     public String getUnionId() {
         return unionId;
     }
@@ -439,6 +442,13 @@ public class SysUser extends BaseEntity {
         this.openId = openId;
     }
 
+    public String getAppId() {
+        return appId;
+    }
+
+    public void setAppId(String appId) {
+        this.appId = appId;
+    }
 
     @Override
     public String toString() {

+ 82 - 0
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java

@@ -210,6 +210,88 @@ public class SysLoginService {
         return tokenService.createToken(loginUser);
     }
 
+    /**
+     * 苹果登录
+     *
+     * @param Result 登录凭证 只能用一次
+     * @return
+     */
+    public String appleLogin(String[] Result){
+
+        String appid = Result[0];//jsonObject.getString("openid");
+        System.out.println("appid:"+appid);
+
+        //生成随机nickName
+        String nickName = getStringRandom(16);// 生成16位随机昵称
+        //生成默认的头像
+        String avatarUrl = "http://47.122.10.161:8084/profile/upload/2024/12/31/默认头像_20241231160922A037.png";
+
+        SysUser wxUser = userMapper.selectAppleUserByAppId(appid);
+
+        //如果查不到,则新增,查到了,则更新
+        SysUser user = new SysUser();
+        if (wxUser == null) {
+            // 新增
+            user.setUserName(getStringRandom(16));// 生成16位随机用户名
+            user.setPassword(SecurityUtils.encryptPassword("rQoMxYUIm0#xX9xv"));
+            user.setNickName(nickName);
+            user.setAvatar(avatarUrl);
+            user.setAppId(appid);
+            user.setLoginDate(DateUtils.getNowDate());
+            //新增 用户
+            userMapper.insertUser(user);
+
+
+            //新增加入用户拓展信息表
+            CommunityUserInfo communityUserInfo = new CommunityUserInfo();
+            communityUserInfo.setUserId(user.getUserId());
+            communityUserInfo.setCreateTime(DateUtils.parseDate(DateUtils.getTime()));
+            communityUserInfo.setCreateBy(user.getUserId());
+            communityUserInfoMapper.insert(communityUserInfo);
+
+        }else {
+            //更新
+            user = wxUser;
+            user.setPassword(SecurityUtils.encryptPassword("rQoMxYUIm0#xX9xv"));
+            user.setLoginDate(DateUtils.getNowDate());
+            userMapper.updateUser(user);
+        }
+
+        //组装token信息
+        LoginUser loginUser = new LoginUser();
+        loginUser.setOpenId(appid);
+        //如果有的话设置
+        loginUser.setUser(user);
+        loginUser.setUserId(user.getUserId());
+
+
+        // 登录前置校验
+        loginPreCheck(user.getUserName(), "rQoMxYUIm0#xX9xv");
+        // 用户验证
+        Authentication authentication = null;
+        try {
+            UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user.getUserName(), "rQoMxYUIm0#xX9xv");
+            AuthenticationContextHolder.setContext(authenticationToken);
+            // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername
+            authentication = authenticationManager.authenticate(authenticationToken);
+        } catch (Exception e) {
+            if (e instanceof BadCredentialsException) {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match")));
+                throw new UserPasswordNotMatchException();
+            } else {
+                AsyncManager.me().execute(AsyncFactory.recordLogininfor(user.getUserName(), Constants.LOGIN_FAIL, e.getMessage()));
+                throw new ServiceException(e.getMessage());
+            }
+        } finally {
+            AuthenticationContextHolder.clearContext();
+        }
+        AsyncManager.me().execute(AsyncFactory.recordLogininfor(user.getUserName(), Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success")));
+        loginUser = (LoginUser) authentication.getPrincipal();
+        recordLoginInfo(loginUser.getUserId());
+        // 生成token
+        return tokenService.createToken(loginUser);
+    }
+
     //生成随机用户名,数字和字母组成,
     public static String getStringRandom(int length) {
 

+ 2 - 0
ruoyi-generator/src/main/java/com/ruoyi/TestIOSLogin.java

@@ -28,6 +28,8 @@ public class TestIOSLogin {
         JSONObject playloadObj = IOSToeknUtils.parserIdentityToken(identityToken);
 
         System.out.println(playloadObj);
+
+
         Boolean success;
         try {
             success = IOSToeknUtils.verifyExc(identityToken, playloadObj);

+ 1 - 1
ruoyi-generator/src/main/java/com/ruoyi/generator/vo/CommunityReportUserVo.java

@@ -20,7 +20,7 @@ import java.util.Map;
 * 举报记录表
 * @TableName community_report_user
 */
-@TableName("community_report_user")
+@TableName("ommunity_report_user")
 @Data
 public class CommunityReportUserVo implements Serializable {
 

+ 9 - 0
ruoyi-system/src/main/java/com/ruoyi/system/mapper/SysUserMapper.java

@@ -60,6 +60,15 @@ public interface SysUserMapper extends BaseMapper<SysUser>
      */
     public SysUser selectWxUserByOpenId(String openId);
 
+
+    /**
+     * 苹果根据appId查询用户信息
+     * @param appId
+     * @return
+     */
+    public SysUser selectAppleUserByAppId(String appId);
+
+
     /**
      * 新增用户信息
      * 

+ 13 - 2
ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml

@@ -23,6 +23,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="updateBy"     column="update_by"    />
         <result property="updateTime"   column="update_time"  />
 		<result property="openId"       column="open_id"  />
+		<result property="appId"       column="app_id"  />
+
         <result property="remark"       column="remark"       />
 		<result property="isSex" 		column="is_Sex"/>
 		<result property="userState" 		column="user_state"/>
@@ -94,6 +96,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		where u.open_id = #{openId} and u.del_flag = '0'
 	</select>
 
+	<select id="selectAppleUserByAppId" parameterType="String" resultMap="SysUserResult">
+		<include refid="selectUserVo" />
+		where u.app_id = #{appId} and u.del_flag = '0'
+	</select>
+
 	<select id="selectAllocatedList" parameterType="SysUser" resultMap="SysUserResult">
 	    select distinct u.user_id, u.dept_id, u.user_name, u.nick_name, u.email, u.phonenumber, u.status, u.create_time
 	    from sys_user u
@@ -151,7 +158,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		select user_id, email from sys_user where email = #{email} and del_flag = '0' limit 1
 	</select>
 
-	<insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
+
+    <insert id="insertUser" parameterType="SysUser" useGeneratedKeys="true" keyProperty="userId">
  		insert into sys_user(
  			<if test="userId != null and userId != 0">user_id,</if>
  			<if test="deptId != null and deptId != 0">dept_id,</if>
@@ -165,7 +173,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">status,</if>
  			<if test="createBy != null and createBy != ''">create_by,</if>
 			<if test="openId != null and openId != ''">open_id,</if>
- 			<if test="remark != null and remark != ''">remark,</if>
+			<if test="appId != null and appId != ''">app_id,</if>
+
+		<if test="remark != null and remark != ''">remark,</if>
  			create_time
  		)values(
  			<if test="userId != null and userId != ''">#{userId},</if>
@@ -180,6 +190,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  			<if test="status != null and status != ''">#{status},</if>
  			<if test="createBy != null and createBy != ''">#{createBy},</if>
 			<if test="openId != null and openId != ''">#{openId},</if>
+			<if test="appId != null and appId != ''">#{appId},</if>
  			<if test="remark != null and remark != ''">#{remark},</if>
  			sysdate()
  		)