Browse Source

协定单点登录

lihui007 3 years ago
parent
commit
51dee55f6a

+ 3 - 0
user_auth/src/main/java/com/huaxu/config/SsoConfig.java

@@ -28,4 +28,7 @@ public class SsoConfig {
     // 获取token
     @Value("${sso.xieding.get.token.url}")
     private String tokenUrl;
+
+    @Value("${sso.xieding.login.url}")
+    private String loginUrl;
 }

+ 4 - 4
user_auth/src/main/java/com/huaxu/controller/ThirdPartyLoginController.java

@@ -31,11 +31,11 @@ public class ThirdPartyLoginController {
     @Autowired
     private ThirdPartyLoginService xiedingLoginService;
 
-    @RequestMapping(value = "/getXieDingToken", method = RequestMethod.POST)
-    @ApiOperation(value = "获取协鼎登录的token")
-    public AjaxMessage<String> getXieDingToken(@ApiParam(value = "获取token信息", required = true) @RequestBody LoginQueryDto queryDto) {
+    @RequestMapping(value = "/getLoginUrl", method = RequestMethod.POST)
+    @ApiOperation(value = "获取登录的url")
+    public AjaxMessage<String> getLoginUrl(@ApiParam(value = "获取登录url", required = true) @RequestBody LoginQueryDto queryDto) {
        try {
-           return new AjaxMessage<>(ResultStatus.OK, xiedingLoginService.getToken(queryDto));
+           return new AjaxMessage<>(ResultStatus.OK, xiedingLoginService.getLoginUrl(queryDto));
         } catch (ServiceException e) {
            return new AjaxMessage<>(e.getStatus(), e.getMessage(), null);
         }

+ 11 - 0
user_auth/src/main/java/com/huaxu/dao/AuthTenantMenuMapper.java

@@ -0,0 +1,11 @@
+package com.huaxu.dao;
+
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+
+@Mapper
+public interface AuthTenantMenuMapper {
+
+    String findLinkPath(@Param("tenantId")String tenantId, @Param("menuId")Integer menuId);
+}

+ 1 - 1
user_auth/src/main/java/com/huaxu/dao/UserMapper.java

@@ -113,5 +113,5 @@ public interface UserMapper {
 
     void updateUniqueUserID(@Param("id")Integer id, @Param("uid") String uid);
 
-    User findThirdPartytLoginInfo(String tenantId, String phone);
+    User findThirdPartytLoginInfo(@Param("userId")Integer userId);
 }

+ 3 - 0
user_auth/src/main/java/com/huaxu/dto/thirdparty/LoginQueryDto.java

@@ -16,4 +16,7 @@ public class LoginQueryDto {
 
     @ApiModelProperty(value="菜单ID")
     private int menuId;
+
+    @ApiModelProperty(value="传入系统类型会跳转到相应系统首页")
+    private String systemType;
 }

+ 3 - 0
user_auth/src/main/java/com/huaxu/dto/thirdparty/XieDingResultDto.java

@@ -21,4 +21,7 @@ public class XieDingResultDto {
 
     @ApiModelProperty(value="token")
     private String token;
+
+    @ApiModelProperty(value="请求第三方的前缀url地址")
+    private String prefixUrl;
 }

+ 9 - 0
user_auth/src/main/java/com/huaxu/service/ThirdPartyLoginService.java

@@ -12,4 +12,13 @@ public interface ThirdPartyLoginService {
     * @return java.lang.String
     **/
     String getToken(LoginQueryDto dto);
+
+    /**
+     * @Author lihui
+     * @Description 获取登录url
+     * @Date 16:39 2021/4/7
+     * @Param []
+     * @return java.lang.String
+     **/
+    String getLoginUrl(LoginQueryDto dto);
 }

+ 35 - 9
user_auth/src/main/java/com/huaxu/service/impl/thirdparty/XiedingLoginServiceImpl.java

@@ -1,9 +1,8 @@
 package com.huaxu.service.impl.thirdparty;
 
 import com.alibaba.fastjson.JSONObject;
-import com.alibaba.nacos.client.config.utils.MD5;
-import com.alibaba.nacos.common.util.Md5Utils;
 import com.huaxu.config.SsoConfig;
+import com.huaxu.dao.AuthTenantMenuMapper;
 import com.huaxu.dao.UserMapper;
 import com.huaxu.dto.thirdparty.LoginQueryDto;
 import com.huaxu.dto.thirdparty.XieDingResultDto;
@@ -38,11 +37,36 @@ public class XiedingLoginServiceImpl implements ThirdPartyLoginService {
     @Autowired
     private UserMapper userMapper;
 
+    @Autowired
+    private AuthTenantMenuMapper authMenuMapper;
+
     @Override
     public String getToken(LoginQueryDto queryDto) {
-        String httpIpPortUrl  = "http://www.xdwater365.com/yhfw/security/security";
+        return this.httpInfo(queryDto).getToken();
+    }
+
+    @Override
+    public String getLoginUrl(LoginQueryDto queryDto) {
+        XieDingResultDto resultDto = this.httpInfo(queryDto);
+        String token     = resultDto.getToken();
+        String prefixUrl = resultDto.getPrefixUrl();
+        return String.format(ssoConfig.getLoginUrl(), prefixUrl, token, queryDto.getSystemType());
+    }
+
+    /**
+    * @Author lihui
+    * @Description 请求信息
+    * @Date 15:01 2021/4/19
+    * @Param [queryDto]
+    * @return com.huaxu.dto.thirdparty.XieDingResultDto
+    **/
+    private XieDingResultDto httpInfo(LoginQueryDto queryDto){
         LoginUser currentUser = UserUtil.getCurrentUser();
-        User user = userMapper.findThirdPartytLoginInfo(currentUser.getTenantId(), currentUser.getPhoneNumber());
+        String prefixUrl  = authMenuMapper.findLinkPath(currentUser.getTenantId(), queryDto.getMenuId());
+        if (StringUtils.isEmpty(prefixUrl)) {
+            throw new ServiceException(ResultStatus.ERROR.getStatus(), "未设置请求地址");
+        }
+        User user = userMapper.findThirdPartytLoginInfo(currentUser.getId());
         if (user == null || StringUtils.isEmpty(user.getLoginAccount())){
             throw new ServiceException(ResultStatus.ERROR.getStatus(), "未设置登录账号");
         }
@@ -53,13 +77,14 @@ public class XiedingLoginServiceImpl implements ThirdPartyLoginService {
         String orgCode   = user.getLoginOrgCode();
         Charset charset  = Charset.forName("utf-8");
         // 1.根据账户获取密码
-        String result = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getPwdUrl(), httpIpPortUrl, account, orgCode), charset);
+        String result = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getPwdUrl(), prefixUrl, account, orgCode), charset);
         XieDingResultDto resultDto = JSONObject.parseObject(result, XieDingResultDto.class);
         if (StringUtils.isEmpty(resultDto.getPassword())) {
             throw new ServiceException(ResultStatus.ERROR.getStatus(), resultDto.getMsg());
         }
+
         // 2.绑定单点登陆用户
-        result    = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getBindSingleUrl(), httpIpPortUrl, account, resultDto.getPassword(), orgCode), charset);
+        result    = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getBindSingleUrl(), prefixUrl, account, resultDto.getPassword(), orgCode), charset);
         resultDto = JSONObject.parseObject(result, XieDingResultDto.class);
         if (!resultDto.isStatus()) {
             throw new ServiceException(ResultStatus.ERROR.getStatus(), resultDto.getMsg());
@@ -68,12 +93,13 @@ public class XiedingLoginServiceImpl implements ThirdPartyLoginService {
         String singleKey = resultDto.getSingleKey();
         Long timestamp   = System.currentTimeMillis();
         String sign      = MD5Util.digest(resultDto.getSingleKey() + timestamp + secretKey);
-        result    = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getTokenUrl(), httpIpPortUrl, singleKey, timestamp, sign, code), charset);
+        result    = HttpClientPoolUtil.sendGet(String.format(ssoConfig.getTokenUrl(), prefixUrl, singleKey, timestamp, sign, code), charset);
         resultDto = JSONObject.parseObject(result, XieDingResultDto.class);
         if (!resultDto.isStatus()) {
             throw new ServiceException(ResultStatus.ERROR.getStatus(), resultDto.getMsg());
         }
-        return resultDto.getToken();
+        // 设置请求的前缀
+        resultDto.setPrefixUrl(prefixUrl);
+        return resultDto;
     }
-
 }

+ 1 - 0
user_auth/src/main/resources/application-dev.properties

@@ -83,4 +83,5 @@ iot.url=http://localhost:8090
 sso.xieding.get.pwd.url=%s!getSingleLandUser.action?account=%s&orgCode=%s
 sso.xieding.bind.single.url=%s!bindingSingleLandUser.action?account=%s&password=%s&orgCode=%s
 sso.xieding.get.token.url=%s!createSingleLandToken.action?singleKey=%s&timestamp=%s&signatrue=%s&code=%s
+sso.xieding.login.url=%s!checkSingleLandToken.action?tokenKey=%s&systemType=%s
 

+ 1 - 0
user_auth/src/main/resources/application-prd.properties

@@ -80,5 +80,6 @@ iot.url=http://39.108.175.9:8090
 sso.xieding.get.pwd.url=%s!getSingleLandUser.action?account=%s&orgCode=%s
 sso.xieding.bind.single.url=%s!bindingSingleLandUser.action?account=%s&password=%s&orgCode=%s
 sso.xieding.get.token.url=%s!createSingleLandToken.action?singleKey=%s&timestamp=%s&signatrue=%s&code=%s
+sso.xieding.login.url=%s!checkSingleLandToken.action?tokenKey=%s&systemType=%s
 
 

+ 1 - 0
user_auth/src/main/resources/application-sit.properties

@@ -81,6 +81,7 @@ iot.url=http://114.135.61.188:58080
 sso.xieding.get.pwd.url=%s!getSingleLandUser.action?account=%s&orgCode=%s
 sso.xieding.bind.single.url=%s!bindingSingleLandUser.action?account=%s&password=%s&orgCode=%s
 sso.xieding.get.token.url=%s!createSingleLandToken.action?singleKey=%s&timestamp=%s&signatrue=%s&code=%s
+sso.xieding.login.url=%s!checkSingleLandToken.action?tokenKey=%s&systemType=%s
 
 
 

+ 5 - 0
user_auth/src/main/resources/application-uat.properties

@@ -94,3 +94,8 @@ dubbo.application.qos-accept-foreign-ip=false
 login.auth.tips.template=7lh0fkmppfPywI4YfrnMOAKQTGXzjueU6awMRD7KRUk
 spring.cloud.stream.bindings.wechat-notify-message.destination=wechat_notify_channel_uat
 
+#单点登录第三方请求url
+sso.xieding.get.pwd.url=%s!getSingleLandUser.action?account=%s&orgCode=%s
+sso.xieding.bind.single.url=%s!bindingSingleLandUser.action?account=%s&password=%s&orgCode=%s
+sso.xieding.get.token.url=%s!createSingleLandToken.action?singleKey=%s&timestamp=%s&signatrue=%s&code=%s
+sso.xieding.login.url=%s!checkSingleLandToken.action?tokenKey=%s&systemType=%s

+ 8 - 0
user_auth/src/main/resources/mapper/AuthTenantMenuMapper.xml

@@ -0,0 +1,8 @@
+<?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.huaxu.dao.AuthTenantMenuMapper">
+
+    <select id="findLinkPath" resultType="java.lang.String">
+        select LINK_PATH from uims_tenant_menu  where  tenant_id = #{tenantId} and menu_id =#{menuId}
+    </select>
+</mapper>

+ 1 - 1
user_auth/src/main/resources/mapper/UserMapper.xml

@@ -343,6 +343,6 @@
     </update>
 
     <select id="findThirdPartytLoginInfo" resultType="com.huaxu.entity.User">
-        select login_account loginAccount,login_secret_key loginSecretKey,login_code loginCode,login_org_code loginOrgCode from uims_user  where  TENANT_ID =#{tenantId} and PHONE = #{phone}
+        select login_account loginAccount,login_secret_key loginSecretKey,login_code loginCode,login_org_code loginOrgCode from uims_user  where  ID =#{userId}
     </select>
 </mapper>