OAuthController.java 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package edu.nju.controller;
  2. import edu.nju.controller.data.UserInfo;
  3. import edu.nju.controller.interceptor.AuthRequired;
  4. import lombok.extern.slf4j.Slf4j;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import org.springframework.http.HttpStatus;
  8. import org.springframework.http.ResponseEntity;
  9. import org.springframework.web.bind.annotation.RequestMapping;
  10. import org.springframework.web.bind.annotation.RequestMethod;
  11. import org.springframework.web.bind.annotation.RequestParam;
  12. import org.springframework.web.bind.annotation.RestController;
  13. import org.springframework.web.client.HttpClientErrorException;
  14. import org.springframework.web.client.RestTemplate;
  15. import javax.servlet.http.HttpServletRequest;
  16. import javax.servlet.http.HttpServletResponse;
  17. import javax.servlet.http.HttpSession;
  18. import java.io.IOException;
  19. import java.util.Map;
  20. /**
  21. * @author: Diors.Po
  22. * @Email: 171256175@qq.com
  23. * @date 2019-09-28 10:38
  24. */
  25. @Slf4j
  26. @RestController
  27. public class OAuthController {
  28. @Autowired
  29. private RestTemplate restTemplate;
  30. @Value("${server.host}")
  31. private String serverHost;
  32. @Value("${report.port}")
  33. private String serverPort;
  34. @RequestMapping(value = "/auth", method = RequestMethod.GET)
  35. public void auth(@RequestParam("task_id") Long taskId,
  36. @RequestParam("case_id") Long caseId,
  37. @RequestParam("code") String code, HttpSession session, HttpServletResponse response){
  38. String authUrl = "http://api.mooctest.net/api/v1/oauth/ticket?code="+code;
  39. String userUrl = "http://api.mooctest.net/api/v1/user?session_ticket=";
  40. ResponseEntity<Map> ticketResponse = restTemplate.getForEntity(authUrl, Map.class);
  41. if (ticketResponse.getStatusCode().is4xxClientError()){
  42. log.info(ticketResponse.getBody().get("message").toString());
  43. throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
  44. }
  45. String session_ticket = (String)ticketResponse.getBody().get("session_ticket");
  46. ResponseEntity<UserInfo> userInfoResponse = restTemplate.getForEntity(userUrl + session_ticket, UserInfo.class);
  47. if (userInfoResponse.getStatusCode().is4xxClientError()){
  48. log.info(ticketResponse.getBody().get("message").toString());
  49. throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
  50. }
  51. session.setAttribute("userInfo", userInfoResponse.getBody());
  52. session.setAttribute("caseId", caseId);
  53. session.setAttribute("taskId", taskId);
  54. try {
  55. response.sendRedirect("http://"+serverHost+":"+serverPort+"/report/detail/"+taskId+"/"+caseId+"/"+userInfoResponse.getBody().getId());
  56. } catch (IOException e) {
  57. e.printStackTrace();
  58. }
  59. }
  60. @AuthRequired
  61. @RequestMapping(value = "/auth/user", method = RequestMethod.GET)
  62. public UserInfo getLoginUser(HttpSession session){
  63. if (session.getAttribute("userInfo")==null)
  64. throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
  65. UserInfo userInfo = (UserInfo) session.getAttribute("userInfo");
  66. return userInfo;
  67. }
  68. }