liusheng
3 天以前 c462811cd33e81a80bc089e3677975c069d9cda5
ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/SysLoginService.java
@@ -1,20 +1,6 @@
package com.ruoyi.framework.web.service;
import javax.annotation.Resource;
import com.alibaba.fastjson2.JSONObject;
import com.ruoyi.common.utils.HttpUtil;
import com.ruoyi.common.utils.RSAPublicKeyExample;
import com.smartor.service.impl.ServiceSLTDHealthcareRecordServiceImpl;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import com.ruoyi.common.constant.CacheConstants;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.entity.SysUser;
@@ -24,17 +10,24 @@
import com.ruoyi.common.exception.user.CaptchaException;
import com.ruoyi.common.exception.user.CaptchaExpireException;
import com.ruoyi.common.exception.user.UserPasswordNotMatchException;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.MessageUtils;
import com.ruoyi.common.utils.ServletUtils;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.*;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.framework.manager.AsyncManager;
import com.ruoyi.framework.manager.factory.AsyncFactory;
import com.ruoyi.framework.security.context.AuthenticationContextHolder;
import com.ruoyi.system.service.ISysConfigService;
import com.ruoyi.system.service.ISysUserService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.util.HashMap;
import java.util.Map;
@@ -75,6 +68,9 @@
    @Value("${spring.profiles.active}")
    private String active;
    @Value("${lwl_app_key}")
    private String APP_KEY;
    /**
     * 登录验证
@@ -134,7 +130,7 @@
     */
    public String ssoLogin(String userName, String orgid, String deptId, String campusid, String token) {
        // sltd 环境:通过 SSO token 获取员工账号
        if ("sltd".equals(active)) {
        if ("sltd".equals(active) || "nhfy".equals(active)) {
            userName = resolveUserNameBySltdToken(token);
            if (userName == null) {
                return null;
@@ -166,7 +162,7 @@
     */
    private String resolveUserNameBySltdToken(String token) {
        Map<String, String> headers = new HashMap<>();
        headers.put("app-key", ServiceSLTDHealthcareRecordServiceImpl.APP_KEY);
        headers.put("app-key", APP_KEY);
        Map<String, String> requestParams = new HashMap<>();
        requestParams.put("token", token);
        String reqData = HttpUtil.postFormRequest(sltdPubPath + "/checkSsoTokenId", requestParams, headers, null);
@@ -226,15 +222,22 @@
    }
    /**
     * 记录登录信息
     * 记录登录信息(异步执行,不阻塞登录主流程)
     *
     * @param userId 用户ID
     */
    public void recordLoginInfo(Long userId) {
        SysUser sysUser = new SysUser();
        sysUser.setUserId(userId);
        sysUser.setLoginIp(IpUtils.getIpAddr(ServletUtils.getRequest()));
        sysUser.setLoginDate(DateUtils.getNowDate());
        userService.updateUserProfile(sysUser);
        // 在异步前捕获IP,避免异步线程中Request上下文失效
        String loginIp = IpUtils.getIpAddr(ServletUtils.getRequest());
        AsyncManager.me().execute(new java.util.TimerTask() {
            @Override
            public void run() {
                SysUser sysUser = new SysUser();
                sysUser.setUserId(userId);
                sysUser.setLoginIp(loginIp);
                sysUser.setLoginDate(DateUtils.getNowDate());
                userService.updateUserProfile(sysUser);
            }
        });
    }
}