ard-work/src/main/java/com/ruoyi/rongcloud/controller/RongCloudController.java
@@ -38,7 +38,7 @@ return AjaxResult.success(token); } @PostMapping("/uploadPic") @ApiOperation("上传图片") @ApiOperation("上传用户头像") public AjaxResult uploadPic(MultipartFile file) { String url = MinioUtils.putObjectAndGetUrl("useravatar", file); ard-work/src/main/java/com/ruoyi/rongcloud/service/Impl/RongCloudServiceImpl.java
@@ -1,5 +1,8 @@ package com.ruoyi.rongcloud.service.Impl; import com.alibaba.fastjson2.JSONObject; import com.fasterxml.jackson.databind.util.JSONPObject; import com.ruoyi.alarm.stealAlarm.domain.ArdAlarmStealelec; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.rongcloud.domain.TokenParam; import com.ruoyi.rongcloud.service.RongCloudService; @@ -13,6 +16,7 @@ import javax.annotation.Resource; import java.util.Date; import java.util.Map; /** * @Description: @@ -41,7 +45,9 @@ String Nonce = String.valueOf(Math.random()).split("\\.")[1]; String Timestamp = String.valueOf(new Date().getTime()); String Signature = DigestUtils.sha1Hex(appSecret + Nonce + Timestamp);//App Secret + Nonce + Timestamp String token = rongCloudClient.getToken(rongyunApiUrl,appKey, Nonce, Timestamp, Signature, param); String jsonStr = rongCloudClient.getToken(rongyunApiUrl,appKey, Nonce, Timestamp, Signature, param); Map map = JSONObject.parseObject(jsonStr, Map.class); String token = (String)map.get("token"); return token; } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/system/SysProfileController.java
@@ -1,5 +1,6 @@ package com.ruoyi.web.controller.system; import com.ruoyi.device.hiksdk.util.minio.MinioUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; @@ -128,7 +129,8 @@ if (!file.isEmpty()) { LoginUser loginUser = getLoginUser(); String avatar = FileUploadUtils.upload(ARDConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); //String avatar = FileUploadUtils.upload(ARDConfig.getAvatarPath(), file, MimeTypeUtils.IMAGE_EXTENSION); String avatar = MinioUtils.putObjectAndGetUrl("useravatar", file); if (userService.updateUserAvatar(loginUser.getUsername(), avatar)) { AjaxResult ajax = AjaxResult.success(); ruoyi-common/src/main/java/com/ruoyi/common/core/domain/entity/SysUser.java
@@ -95,11 +95,23 @@ /** 相机操控优先级 */ private Integer cameraPriority; /** 用户融云token */ private String rongCloudToken; public SysUser() { } public String getRongCloudToken() { return rongCloudToken; } public void setRongCloudToken(String rongCloudToken) { this.rongCloudToken = rongCloudToken; } public Integer getCameraPriority() { return cameraPriority; } ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,6 +1,8 @@ package com.ruoyi.framework.web.service; import javax.annotation.Resource; import com.ruoyi.rongcloud.service.RongCloudService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; @@ -29,12 +31,11 @@ /** * 登录校验方法 * * * @author ruoyi */ @Component public class SysLoginService { public class SysLoginService { @Autowired private TokenService tokenService; @@ -43,83 +44,75 @@ @Autowired private RedisCache redisCache; @Autowired private ISysUserService userService; @Autowired private ISysConfigService configService; @Resource RongCloudService rongCloudService; /** * 登录验证 * * * @param username 用户名 * @param password 密码 * @param code 验证码 * @param uuid 唯一标识 * @param code 验证码 * @param uuid 唯一标识 * @return 结果 */ public String login(String username, String password, String code, String uuid) { public String login(String username, String password, String code, String uuid) { boolean captchaEnabled = configService.selectCaptchaEnabled(); // 验证码开关 if (captchaEnabled) { if (captchaEnabled) { validateCaptcha(username, code, uuid); } // 用户验证 Authentication authentication = null; try { try { UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(username, password); AuthenticationContextHolder.setContext(authenticationToken); // 该方法会去调用UserDetailsServiceImpl.loadUserByUsername authentication = authenticationManager.authenticate(authenticationToken); } catch (Exception e) { if (e instanceof BadCredentialsException) { } catch (Exception e) { if (e instanceof BadCredentialsException) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.password.not.match"))); throw new UserPasswordNotMatchException(); } else { } else { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, e.getMessage())); throw new ServiceException(e.getMessage()); } } finally { } finally { AuthenticationContextHolder.clearContext(); } AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_SUCCESS, MessageUtils.message("user.login.success"))); LoginUser loginUser = (LoginUser) authentication.getPrincipal(); recordLoginInfo(loginUser.getUserId()); // 生成token return tokenService.createToken(loginUser); String token = tokenService.createToken(loginUser); //获取融云token getRongCloudToken(loginUser); return token; } /** * 校验验证码 * * * @param username 用户名 * @param code 验证码 * @param uuid 唯一标识 * @param code 验证码 * @param uuid 唯一标识 * @return 结果 */ public void validateCaptcha(String username, String code, String uuid) { public void validateCaptcha(String username, String code, String uuid) { String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, ""); String captcha = redisCache.getCacheObject(verifyKey); redisCache.deleteObject(verifyKey); if (captcha == null) { if (captcha == null) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.expire"))); throw new CaptchaExpireException(); } if (!code.equalsIgnoreCase(captcha)) { if (!code.equalsIgnoreCase(captcha)) { AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.LOGIN_FAIL, MessageUtils.message("user.jcaptcha.error"))); throw new CaptchaException(); } @@ -130,12 +123,29 @@ * * @param userId 用户ID */ public void recordLoginInfo(String userId) { public void recordLoginInfo(String userId) { SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest())); sysUser.setLoginDate(DateUtils.getNowDate()); userService.updateUserProfile(sysUser); } /** * 获取并记录融云token * * @param loginUser 登录用户 */ public void getRongCloudToken(LoginUser loginUser) { try { String userId = loginUser.getUserId(); String nickName = loginUser.getUser().getNickName(); String token = rongCloudService.getToken(userId, nickName); SysUser sysUser = new SysUser(); sysUser.setUserId(userId); sysUser.setRongCloudToken(token); userService.updateUser(sysUser); } catch (Exception ex) { throw ex; } } } ruoyi-system/src/main/resources/mapper/system/SysUserMapper.xml
@@ -23,6 +23,7 @@ <result property="updateBy" column="update_by"/> <result property="updateTime" column="update_time"/> <result property="cameraPriority" column="camera_priority"/> <result property="rongCloudToken" column="rong_cloud_token"/> <result property="remark" column="remark"/> <association property="dept" column="dept_id" javaType="SysDept" resultMap="deptResult"/> <collection property="roles" javaType="java.util.List" resultMap="RoleResult"/> @@ -64,6 +65,7 @@ u.create_by, u.create_time, u.camera_priority, u.rong_cloud_token, u.remark, d.dept_id, d.parent_id, @@ -86,7 +88,7 @@ <select id="selectUserList" parameterType="SysUser" resultMap="SysUserResult"> select u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.camera_priority, d.dept_name, d.leader from sys_user u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,u.camera_priority,u.rong_cloud_token, d.dept_name, d.leader from sys_user u left join sys_dept d on u.dept_id = d.dept_id where u.del_flag = '0' @@ -234,6 +236,7 @@ <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="remark != null">remark = #{remark},</if> <if test="cameraPriority != null">camera_priority = #{cameraPriority},</if> <if test="rongCloudToken != null">rong_cloud_token = #{rongCloudToken},</if> update_time = now() </set> where user_id = #{userId}