e7bbad7dcb4e8985a068d57a14a96172971cfa9d.svn-base 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. package cn.com.goldenwater.dcproj.controller.sso;
  2. import cn.com.goldenwater.core.web.BaseController;
  3. import cn.com.goldenwater.core.web.BaseResponse;
  4. import cn.com.goldenwater.dcproj.model.BisInspAllRlationPers;
  5. import cn.com.goldenwater.dcproj.service.HnCasService;
  6. import cn.com.goldenwater.dcproj.utils.HttpClientUtils;
  7. import cn.com.goldenwater.id.util.UuidUtil;
  8. import com.alibaba.fastjson.JSON;
  9. import io.swagger.annotations.Api;
  10. import net.sf.json.JSONObject;
  11. import org.slf4j.Logger;
  12. import org.slf4j.LoggerFactory;
  13. import org.springframework.beans.factory.annotation.Autowired;
  14. import org.springframework.beans.factory.annotation.Value;
  15. import org.springframework.web.bind.annotation.RequestMapping;
  16. import org.springframework.web.bind.annotation.RequestMethod;
  17. import org.springframework.web.bind.annotation.RequestParam;
  18. import org.springframework.web.bind.annotation.RestController;
  19. import javax.servlet.http.HttpServletRequest;
  20. import java.util.Base64;
  21. import java.util.HashMap;
  22. import java.util.Map;
  23. @Api(value = "海南单点登录", tags = "海南单点登录")
  24. @RestController
  25. @RequestMapping("/cas/hn")
  26. public class HnCasController extends BaseController {
  27. private Logger logger = LoggerFactory.getLogger(getClass());
  28. @Value("${hn.auth.baseurl}")
  29. private String hnAuthBaseUrl;
  30. @Value("${hn.auth.client_id}")
  31. private String hnAuthClientId;
  32. @Value("${hn.auth.client_screct}")
  33. private String hnAuthClientScrect;
  34. @Value("${hn.auth.redirect}")
  35. private String redirect;
  36. @Autowired
  37. HnCasService hnCasService;
  38. @RequestMapping(value = "/", method = RequestMethod.GET)
  39. public BaseResponse<Object> code(@RequestParam(value = "ticket", required = false) String ticket, HttpServletRequest request) throws Exception {
  40. //根据code 获取对应的 token
  41. Map<String, String> params = new HashMap<>();
  42. params.put("grant_type", "authorization_code");
  43. params.put("code", ticket);
  44. params.put("redirect_uri", redirect);
  45. logger.info("---------------send fj sso ---------------");
  46. Map<String, String> headerMap = new HashMap<>();
  47. String userName = "Username:";
  48. headerMap.put("Authorization", "Basic " + Base64.getUrlEncoder().encodeToString((hnAuthClientId + ":" + hnAuthClientScrect).getBytes()));
  49. String ret = HttpClientUtils.doHttpsPost(hnAuthBaseUrl + "/auth/oauth/token", params, headerMap);
  50. //根据token获取用户信息
  51. logger.info(ret);
  52. //字符串转json 获取token
  53. String accessToken = JSONObject.fromObject(ret).get("access_token").toString();
  54. String refreshToken = JSONObject.fromObject(ret).get("refresh_token").toString();
  55. //根据token获取用户信息
  56. Map<String, String> tokenParam = new HashMap<>();
  57. tokenParam.put("access_token", accessToken);
  58. headerMap.clear();
  59. headerMap.put("Authorization", "Bearer " + accessToken);
  60. String user = HttpClientUtils.simpleGetInvoke(hnAuthBaseUrl + "/auth/v1/user/me", tokenParam, headerMap, "UTF-8");
  61. logger.info(user);
  62. String mobile = JSONObject.fromObject(user).get("userId").toString();
  63. //手机号默认登录,如果没有则增加用户设置督查权限。参数,有用户名,密码,手机号,默认角色
  64. Map<String, Object> ssoUserMap = jsonToMap(JSONObject.fromObject(user).toString());
  65. logger.info("---------------sso login-------------------------------");
  66. if (ssoUserMap != null) {
  67. logger.info("---------------sso user not null -------------------------------");
  68. BisInspAllRlationPers bisInspAllRlationPers = hnCasService.validateUser(ssoUserMap);
  69. if (bisInspAllRlationPers == null) {
  70. return buildFailResponse(1001, "登陆名或密码错误", "", "");
  71. } else {
  72. logger.info("---------------sso user null -------------------------------");
  73. String uuid = UuidUtil.uuid();
  74. bisInspAllRlationPers = hnCasService.validateTicket(bisInspAllRlationPers, uuid, request);
  75. logger.info("---------------sso add -------------------------------");
  76. return buildSuccessResponse(bisInspAllRlationPers, uuid);
  77. }
  78. } else {
  79. logger.info("---------------sso no user -------------------------------");
  80. return buildFailResponse("无法获取用户信息");
  81. }
  82. }
  83. public Map<String, Object> jsonToMap(String json) {
  84. Map<String, Object> map = new HashMap<>();
  85. map = JSON.parseObject(JSON.parse(json).toString(), HashMap.class);
  86. return map;
  87. }
  88. /**
  89. * 根据token获取 用户信息
  90. * @param token
  91. * @param request
  92. * @return
  93. * @throws Exception
  94. */
  95. @RequestMapping(value = "/loginByToken", method = RequestMethod.GET)
  96. public BaseResponse<Object> loginByToken(@RequestParam(value = "token", required = false) String token, HttpServletRequest request) throws Exception {
  97. Map<String, String> headerMap = new HashMap<>();
  98. Map<String, String> tokenParam = new HashMap<>();
  99. tokenParam.put("access_token", token);
  100. headerMap.put("Authorization", "Bearer " + token);
  101. String user = HttpClientUtils.simpleGetInvoke(hnAuthBaseUrl + "/auth/v1/user/me", tokenParam, headerMap, "UTF-8");
  102. logger.info(user);
  103. String mobile = JSONObject.fromObject(user).get("userId").toString();
  104. //手机号默认登录,如果没有则增加用户设置督查权限。参数,有用户名,密码,手机号,默认角色
  105. Map<String, Object> ssoUserMap = jsonToMap(JSONObject.fromObject(user).toString());
  106. logger.info("---------------sso login-------------------------------");
  107. if (ssoUserMap != null) {
  108. logger.info("---------------sso user not null -------------------------------");
  109. BisInspAllRlationPers bisInspAllRlationPers = hnCasService.validateUser(ssoUserMap);
  110. if (bisInspAllRlationPers == null) {
  111. return buildFailResponse(1001, "登陆名或密码错误", "", "");
  112. } else {
  113. logger.info("---------------sso user null -------------------------------");
  114. String uuid = UuidUtil.uuid();
  115. bisInspAllRlationPers = hnCasService.validateTicket(bisInspAllRlationPers, uuid, request);
  116. logger.info("---------------sso add -------------------------------");
  117. return buildSuccessResponse(bisInspAllRlationPers, uuid);
  118. }
  119. } else {
  120. logger.info("---------------sso no user -------------------------------");
  121. return buildFailResponse("无法获取用户信息");
  122. }
  123. }
  124. }