12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- package edu.nju.controller;
- import edu.nju.controller.data.UserInfo;
- import edu.nju.controller.interceptor.AuthRequired;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.beans.factory.annotation.Value;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.ResponseEntity;
- 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 org.springframework.web.client.HttpClientErrorException;
- import org.springframework.web.client.RestTemplate;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import javax.servlet.http.HttpSession;
- import java.io.IOException;
- import java.util.Map;
- /**
- * @author: Diors.Po
- * @Email: 171256175@qq.com
- * @date 2019-09-28 10:38
- */
- @Slf4j
- @RestController
- public class OAuthController {
- @Autowired
- private RestTemplate restTemplate;
- @Value("${server.host}")
- private String serverHost;
- @Value("${report.port}")
- private String serverPort;
- @RequestMapping(value = "/auth", method = RequestMethod.GET)
- public void auth(@RequestParam("task_id") Long taskId,
- @RequestParam("case_id") Long caseId,
- @RequestParam("code") String code, HttpSession session, HttpServletResponse response){
- String authUrl = "http://api.mooctest.net/api/v1/oauth/ticket?code="+code;
- String userUrl = "http://api.mooctest.net/api/v1/user?session_ticket=";
- ResponseEntity<Map> ticketResponse = restTemplate.getForEntity(authUrl, Map.class);
- if (ticketResponse.getStatusCode().is4xxClientError()){
- log.info(ticketResponse.getBody().get("message").toString());
- throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
- }
- String session_ticket = (String)ticketResponse.getBody().get("session_ticket");
- ResponseEntity<UserInfo> userInfoResponse = restTemplate.getForEntity(userUrl + session_ticket, UserInfo.class);
- if (userInfoResponse.getStatusCode().is4xxClientError()){
- log.info(ticketResponse.getBody().get("message").toString());
- throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
- }
- session.setAttribute("userInfo", userInfoResponse.getBody());
- session.setAttribute("caseId", caseId);
- session.setAttribute("taskId", taskId);
- try {
- response.sendRedirect("http://"+serverHost+":"+serverPort+"/report/detail/"+taskId+"/"+caseId+"/"+userInfoResponse.getBody().getId());
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- @AuthRequired
- @RequestMapping(value = "/auth/user", method = RequestMethod.GET)
- public UserInfo getLoginUser(HttpSession session){
- if (session.getAttribute("userInfo")==null)
- throw new HttpClientErrorException(HttpStatus.UNAUTHORIZED);
- UserInfo userInfo = (UserInfo) session.getAttribute("userInfo");
- return userInfo;
- }
- }
|