OpenApiController.java 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. package com.qmth.cdut.api;
  2. import com.qmth.boot.api.annotation.Aac;
  3. import com.qmth.boot.api.annotation.BOOL;
  4. import com.qmth.boot.api.constant.ApiConstant;
  5. import com.qmth.cdut.supwisdom.CasUtils;
  6. import com.qmth.cdut.supwisdom.Constants;
  7. import com.qmth.cdut.supwisdom.LoginUser;
  8. import com.qmth.teachcloud.exchange.common.contant.SystemConstant;
  9. import com.qmth.teachcloud.exchange.common.enums.ExceptionResultEnum;
  10. import com.qmth.teachcloud.exchange.common.service.AuthInfoService;
  11. import com.qmth.teachcloud.exchange.common.service.CommonService;
  12. import com.qmth.teachcloud.exchange.common.util.Result;
  13. import com.qmth.teachcloud.exchange.common.util.ServletUtil;
  14. import io.swagger.annotations.*;
  15. import org.apache.commons.lang3.StringUtils;
  16. import org.slf4j.Logger;
  17. import org.slf4j.LoggerFactory;
  18. import org.springframework.beans.factory.annotation.Value;
  19. import org.springframework.validation.annotation.Validated;
  20. import org.springframework.web.bind.annotation.RequestMapping;
  21. import org.springframework.web.bind.annotation.RequestMethod;
  22. import org.springframework.web.bind.annotation.RequestParam;
  23. import org.springframework.web.bind.annotation.RestController;
  24. import javax.annotation.Resource;
  25. import javax.servlet.ServletContext;
  26. import javax.servlet.http.HttpServletRequest;
  27. import javax.servlet.http.HttpServletResponse;
  28. import javax.servlet.http.HttpSession;
  29. import java.io.IOException;
  30. import java.util.Objects;
  31. import java.util.StringJoiner;
  32. /**
  33. * <p>
  34. * 成都理工大学开放接口前端控制器
  35. * </p>
  36. */
  37. @Api(tags = "成都理工大学开放接口Controller")
  38. @RestController
  39. @RequestMapping(ApiConstant.DEFAULT_URI_PREFIX + SystemConstant.PREFIX_URL_OPEN)
  40. @Validated
  41. public class OpenApiController {
  42. private static final Logger log = LoggerFactory.getLogger(OpenApiController.class);
  43. private static final String schoolCode = "cdut";//测试学校code,成都理工大学
  44. @Resource
  45. CommonService commonService;
  46. @Resource
  47. AuthInfoService authInfoService;
  48. @Value("${cas.config.logoutUrl}")
  49. String logoutUrl;
  50. @Value("${cas.config.returnUrl}")
  51. String returnUrl;
  52. @ApiOperation(value = "成都理工大学cas鉴权接口")
  53. @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
  54. @RequestMapping(value = "/authentication", method = RequestMethod.GET)
  55. @Aac(auth = BOOL.FALSE)
  56. public void sso(HttpServletRequest request, HttpServletResponse response) throws IOException {
  57. HttpSession session = request.getSession();
  58. String targetUrl = CasUtils.getTargetUrl(request);
  59. authInfoService.appHasExpired(schoolCode);
  60. if (CasUtils.isLogin(session)) {
  61. LoginUser loginUser = (LoginUser) session.getAttribute(Constants.LOGIN_USER_KEY);
  62. String account = loginUser.getAccount();
  63. String sessionId = session.getId();
  64. if (StringUtils.isNotBlank(sessionId)) {
  65. StringJoiner stringJoiner = new StringJoiner("");
  66. stringJoiner.add(logoutUrl).add(SystemConstant.GET_UNKNOWN).add("sessionId")
  67. .add(SystemConstant.GET_EQUAL).add(sessionId);
  68. returnUrl = stringJoiner.toString();
  69. } else {
  70. throw ExceptionResultEnum.ERROR.exception("sessionId为空");
  71. }
  72. commonService.redirectLogic(account, schoolCode, returnUrl, null);
  73. } else {
  74. if (CasUtils.hasTicket(request)) {
  75. LoginUser loginUser = CasUtils.getLoginUser(request);
  76. if (loginUser.isLogin() && doLogin(loginUser, request)) {
  77. CasUtils.login(loginUser, session);
  78. String account = loginUser.getAccount();
  79. commonService.redirectLogic(account, schoolCode, returnUrl, null);
  80. } else {
  81. String loginUrl = CasUtils.getLoginUrl(request);
  82. response.sendRedirect(loginUrl);
  83. // TODO 可选:业务系统可根据实际情况进行处理
  84. // response.sendRedirect(CasUtils.getErrorUrl(request));
  85. }
  86. } else {
  87. String loginUrl = CasUtils.getLoginUrl(request);
  88. response.sendRedirect(loginUrl);
  89. }
  90. }
  91. }
  92. @ApiOperation(value = "西安交通大学cas鉴权退出接口")
  93. @RequestMapping(value = "/authentication/logout", method = RequestMethod.GET)
  94. @ApiResponses({@ApiResponse(code = 200, message = "返回消息", response = Result.class)})
  95. @Aac(auth = BOOL.FALSE)
  96. public void logout(@ApiParam(value = "sessionId", required = true) @RequestParam String sessionId) throws IOException {
  97. if (Objects.isNull(logoutUrl) || Objects.equals(logoutUrl, "")) {
  98. throw ExceptionResultEnum.PARAMS_ERROR.exception("鉴权退出地址不存在");
  99. }
  100. if (Objects.isNull(sessionId) || Objects.equals(sessionId, "")) {
  101. throw ExceptionResultEnum.PARAMS_ERROR.exception("sessionId为空");
  102. }
  103. authInfoService.appHasExpired(schoolCode);
  104. HttpServletRequest request = ServletUtil.getRequest();
  105. HttpServletResponse response = ServletUtil.getResponse();
  106. if (doLogout(request)) {
  107. HttpSession session = request.getSession();
  108. CasUtils.logout(session);
  109. response.sendRedirect(CasUtils.getLogoutUrl(request));
  110. } else {
  111. response.sendRedirect(CasUtils.getLoginUrl(request));
  112. }
  113. }
  114. public boolean doLogin(LoginUser loginUser, HttpServletRequest request) {
  115. HttpSession session = request.getSession();
  116. ServletContext application = session.getServletContext();
  117. // 如果使用了Spring可以用下面的方法获取spring的context对象
  118. // WebApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(application);
  119. // 如果需要使用SpringMVC上下文、可以用下面的方法获取springMVC的context对象
  120. // WebApplicationContext mvcContext = RequestContextUtils.getWebApplicationContext(request);
  121. // TODO 需要业务系统重写
  122. return true;
  123. }
  124. public boolean doLogout(HttpServletRequest request) {
  125. return true;
  126. }
  127. }