package cn.com.goldenwater.dcproj.controller.sso; import cn.com.goldenwater.core.web.BaseController; import cn.com.goldenwater.core.web.BaseResponse; import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers; import cn.com.goldenwater.dcproj.service.SdCasService; import cn.com.goldenwater.dcproj.utils.HttpClientUtils; import cn.com.goldenwater.id.util.UuidUtil; import com.alibaba.fastjson.JSON; import io.swagger.annotations.Api; import net.sf.json.JSONObject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.HashMap; import java.util.Map; @Api(value = "山东单点登录", tags = "山东单点登录") @RestController @RequestMapping("/cas/sd") public class SdCasController extends BaseController { private Logger logger = LoggerFactory.getLogger(getClass()); @Value("${sd.auth.baseurl}") private String sdAuthBaseUrl; @Value("${sd.auth.client_id}") private String sdAuthClientId; @Autowired SdCasService sdCasService; @RequestMapping(value = "/validateTicketKey", method = RequestMethod.GET) public BaseResponse code(@RequestParam(value = "ticket", required = false) String ticket, HttpServletRequest request) throws Exception { //根据appCode获取sessionId String sessionId = ""; String accessToken = ""; Map headerMap = new HashMap<>(); Map params = new HashMap<>(); params.put("appCode", sdAuthClientId); String ret = HttpClientUtils.simpleGetInvoke(sdAuthBaseUrl + "/auth-external-microservice/v1/login/open/getLoginCode", params); logger.info("sessionId ret-------------------------" + ret + "-------------------------"); sessionId = JSONObject.fromObject(ret).get("data").toString(); logger.info("sessionId-------------------------" + sessionId + "-------------------------"); //根据 sdAuthClientId sessionId 获取token params.clear(); params.put("ticket", ticket); params.put("appCode", sdAuthClientId); params.put("code", sessionId); headerMap.put("Content-Type", "application/json;charset=UTF-8"); ret = HttpClientUtils.doHttpsPost2(sdAuthBaseUrl + "/auth-external-microservice/v1/login/open/loginWithTicket", params, headerMap); logger.info("token ret-------------------------" + ret + "-------------------------"); accessToken = JSONObject.fromObject(JSONObject.fromObject(JSONObject.fromObject(ret).get("data").toString()).get("token").toString()).get("accessToken").toString(); logger.info("token-------------------------" + accessToken + "-------------------------"); //根据token 获取用户信息 headerMap.clear(); params.clear(); headerMap.put("Authorization", "Bearer " + accessToken); ret = HttpClientUtils.doHttpsPost2(sdAuthBaseUrl + "/auth-external-microservice/v1/login/getLoginUserInfo", params, headerMap); logger.info("user-------------------------" + ret + "-------------------------"); Map ssoUserMap = jsonToMap(JSONObject.fromObject(ret).get("data").toString()); logger.info("---------------sso login-------------------------------"); if (ssoUserMap != null && null != ssoUserMap.get("phone")) { logger.info("---------------sso user not null -------------------------------"); BisInspAllRlationPers bisInspAllRlationPers = sdCasService.validateUser(ssoUserMap); if (bisInspAllRlationPers == null) { return buildFailResponse(1001, "登陆名或密码错误", "", ""); } else { logger.info("---------------sso user null -------------------------------"); String uuid = UuidUtil.uuid(); bisInspAllRlationPers = sdCasService.validateTicket(bisInspAllRlationPers, uuid, request); logger.info("---------------sso add -------------------------------"); return buildSuccessResponse(bisInspAllRlationPers, uuid); } } else { logger.info("---------------sso no user -------------------------------"); return buildFailResponse("无法获取用户信息"); } } public Map jsonToMap(String json) { Map map = new HashMap<>(); map = JSON.parseObject(JSON.parse(json).toString(), HashMap.class); return map; } }