| | |
| | | package com.ruoyi.web.controller.sso; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.ruoyi.common.core.domain.entity.SysDept; |
| | | import com.ruoyi.common.core.domain.entity.SysUser; |
| | | import com.ruoyi.common.core.domain.model.LoginUser; |
| | | import com.ruoyi.common.exception.base.BaseException; |
| | |
| | | import com.ruoyi.common.utils.OkHttpExample; |
| | | import com.ruoyi.common.utils.StringUtils; |
| | | import com.ruoyi.common.utils.http.HttpUtils; |
| | | import com.ruoyi.framework.web.service.SysLoginService; |
| | | import com.ruoyi.framework.web.service.TokenService; |
| | | import com.ruoyi.system.service.ISysConfigService; |
| | | import com.ruoyi.system.service.ISysDeptService; |
| | | import com.ruoyi.system.service.ISysUserService; |
| | | import com.smartor.domain.SSOTokenResponse; |
| | | import com.smartor.domain.SSOUserInfo; |
| | | import com.smartor.domain.ServiceSubtask; |
| | | import com.smartor.domain.VO.ServiceSubtaskVO; |
| | | import com.smartor.domain.entity.ServiceSubtaskEntity; |
| | | import com.smartor.service.IServiceSubtaskService; |
| | | import com.smartor.service.impl.ServiceSubtaskServiceImpl; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.apache.commons.collections.CollectionUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.http.*; |
| | | import org.springframework.http.client.SimpleClientHttpRequestFactory; |
| | | |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.util.ObjectUtils; |
| | | import org.springframework.web.bind.annotation.GetMapping; |
| | | import org.springframework.web.bind.annotation.RequestMapping; |
| | | import org.springframework.web.bind.annotation.RequestParam; |
| | | import org.springframework.web.bind.annotation.RestController; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.client.RestTemplate; |
| | | import org.springframework.web.servlet.view.RedirectView; |
| | | import org.springframework.web.util.UriComponentsBuilder; |
| | |
| | | import javax.servlet.http.HttpServletResponse; |
| | | import java.io.IOException; |
| | | import java.net.URLEncoder; |
| | | import java.util.HashMap; |
| | | import java.util.LinkedHashMap; |
| | | import java.util.Map; |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * SSO单点登录控制器 |
| | |
| | | private TokenService tokenService; |
| | | |
| | | @Autowired |
| | | private SysLoginService loginService; |
| | | |
| | | @Autowired |
| | | private ISysConfigService sysConfigService; |
| | | |
| | | @Autowired |
| | | private ISysDeptService sysDeptService; |
| | | |
| | | private final RestTemplate restTemplate; |
| | | |
| | | @Autowired |
| | | private IServiceSubtaskService serviceSubtaskService; |
| | | |
| | | public SSOController() { |
| | | // 配置RestTemplate超时 |
| | |
| | | // 重定向地址对象(重定向地址 |
| | | RedirectView redirectView = new RedirectView(); |
| | | try { |
| | | SSOTokenResponse accessToken = getAccessTokenLyra(code, accessTokenUrl, clientId, redirectUri, clientSecret,true); |
| | | SSOTokenResponse accessToken = getAccessTokenLyra(code, accessTokenUrl, clientId, clientSecret, redirectUri,true); |
| | | log.info("获取到的token:" + accessToken); |
| | | SSOUserInfo userInfo = getUserInfoLyra(accessToken.getAccess_token(), userInfoUrl,true); |
| | | log.info("获取到的用户信息:" + userInfo); |
| | | createLocalSession(userInfo); |
| | | // createLocalSession(userInfo); |
| | | if (StringUtils.isEmpty(path)) { |
| | | throw new BaseException("请配置前端地址"); |
| | | } |
| | | String reviewUrl = ""; |
| | | reviewUrl = UriComponentsBuilder.fromHttpUrl(path) |
| | | .path("/loginSSO") |
| | | .queryParam("token", accessToken.getAccess_token()) |
| | | .queryParam("orgid", userInfo.getZuZhiJGID()) |
| | | .queryParam("orgname", userInfo.getZuZhiJGMC()) |
| | | .queryParam("ZuHuID", userInfo.getYongHuID()) |
| | | .queryParam("deptCode", "null") |
| | | .build() |
| | | .toUriString(); |
| | | |
| | | log.info("单点登陆重定向地址为:{}", reviewUrl); |
| | | redirectView.setUrl(reviewUrl); |
| | | redirectView.setStatusCode(HttpStatus.FOUND); |
| | | String userName = userInfo.getZhiGongID(); |
| | | String orgid = userInfo.getZuZhiJGID(); |
| | | String campusid = "1"; |
| | | String deptId = null; |
| | | String token = null; |
| | | log.info("【SSO登录】获取用户Token参数:" + userInfo); |
| | | String loginToken = loginService.ssoLogin(userName, orgid, deptId, campusid, token); |
| | | if (StringUtils.isEmpty(loginToken)) { |
| | | log.error("【SSO登录】登录失败,userName={}, orgid={}", userName, orgid); |
| | | return buildRedirect(path + "/login"); |
| | | } |
| | | |
| | | String redirectUrl = path + "/loginSSO?token=" + loginToken + "&orgid=" + orgid + "&orgname=null&ZuHuID=null&deptCode=null"; |
| | | log.info("【SSO登录】重定向地址:{}", redirectUrl); |
| | | return buildRedirect(redirectUrl); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("SSO登录失败", e); |
| | | redirectView.setUrl(path + "/login?error=sso_failed"); |
| | | return redirectView; |
| | | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * ssoGoServiceSubtaskList |
| | | */ |
| | | @PostMapping("ssoGoServiceSubtaskList") |
| | | public RedirectView ssoGoServiceSubtaskList(@RequestBody SSOUserInfo ssoUserInfo) { |
| | | // 重定向地址对象(重定向地址 |
| | | RedirectView redirectView = new RedirectView(); |
| | | String path = sysConfigService.selectConfigByKey("sys.qddz"); |
| | | String userName = ssoUserInfo.getUsername(); |
| | | String orgid = ssoUserInfo.getOrgid(); |
| | | String campusid = ssoUserInfo.getCampusid(); |
| | | String searchCondition = ""; |
| | | String deptCode = ssoUserInfo.getDeptCode(); |
| | | String wardCode = ssoUserInfo.getWardCode(); |
| | | try { |
| | | if (StringUtils.isEmpty(path)) { |
| | | throw new BaseException("请配置前端地址"); |
| | | } |
| | | if(StringUtils.isNotEmpty(deptCode)){ |
| | | searchCondition = "&followUpDeptCode=" + deptCode; |
| | | }else if(StringUtils.isNotEmpty(wardCode)){ |
| | | searchCondition = "&followUpWardCode=" + deptCode; |
| | | } |
| | | String loginToken = loginService.loginByUserName(userName + "&" + orgid + "&null" + "&" + campusid); |
| | | String redirectUrl = path + "/loginSSO?token=" + loginToken + |
| | | "&orgid=" + orgid + "&campusid=" + campusid + |
| | | searchCondition + "&orgname=null&ZuHuID=null&deptCode=null"; |
| | | log.info("【SSO登录】重定向地址:{}", redirectUrl); |
| | | return buildRedirect(redirectUrl); |
| | | |
| | | } catch (Exception e) { |
| | | log.error("SSO登录失败", e); |
| | | redirectView.setUrl(path + "/login?error=sso_failed"); |
| | | return redirectView; |
| | | |
| | | } |
| | | } |
| | | /** |
| | | * 构建重定向视图 |
| | | */ |
| | | private RedirectView buildRedirect(String url) { |
| | | RedirectView redirectView = new RedirectView(); |
| | | redirectView.setUrl(url); |
| | | redirectView.setStatusCode(HttpStatus.MOVED_PERMANENTLY); |
| | | return redirectView; |
| | | } |
| | | |