提交 feb6da22 authored 作者: zhoushaopan's avatar zhoushaopan

feat(根据ticket获取token的接口): 新增接口

新增提供根据token获取当前人员信息
上级 bfc58a1c
package com.tykj.zlbapp.subject.controller;
import com.alibaba.fastjson.JSONObject;
import com.tykj.zlbapp.subject.service.ZlbAppAuthService;
import com.tykj.zlbapp.subject.vo.TokenVO;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import static com.tykj.zlbapp.contants.AppConstants.TOKEN_SESSION_KEY;
/**
* @author zsp
......@@ -32,10 +28,10 @@ public class ZlbAppController {
@GetMapping("/getAppTokenByTicketId")
@ApiOperation(value = "根据票据换取token", notes = "根据票据换取token")
public TokenVO getTokenByTicketId(String ticketId, HttpServletRequest request) {
public ResponseEntity getAppTokenByTicketId(String ticketId, HttpServletRequest request) {
// HttpSession session = request.getSession();
//1. 通过ticketId 换取 accessToken
TokenVO tokenByTicket = zlbAppAuthService.getTokenByTicket(ticketId);
// //2. 保存accessToken
// session.setAttribute(TOKEN_SESSION_KEY, tokenByTicket.g);
//// //3. 通过accessToken 获取用户信息
......@@ -43,7 +39,14 @@ public class ZlbAppController {
//// //4. 缓存用户信息
//// session.setAttribute(USER_INFO_KEY, userInfo);
// log.info("session:{}",session);
return tokenByTicket;
return ResponseEntity.ok( zlbAppAuthService.getTokenByTicket(ticketId));
}
@GetMapping("/getAppUserInfoByToken")
@ApiOperation(value = "根据token获取当前登录的用户信息", notes = "根据token获取当前登录的用户信息")
public ResponseEntity getAppUserInfoByToken(String token) {
return ResponseEntity.ok(zlbAppAuthService.getUserInfoByToken(token));
}
}
......@@ -2,6 +2,8 @@ package com.tykj.zlbapp.subject.service;
import com.tykj.zlbapp.subject.vo.TokenVO;
import java.util.Map;
/**
* @author zsp
* @version 1.0
......@@ -9,5 +11,13 @@ import com.tykj.zlbapp.subject.vo.TokenVO;
*/
public interface ZlbAppAuthService {
TokenVO getTokenByTicket(String ticketId);
/**
* 根据ticketId获取token
* @param ticketId ticketId
* @return 对象
*/
Map<String, Object> getTokenByTicket(String ticketId);
Map<String, Object> getUserInfoByToken(String token);
}
......@@ -31,7 +31,7 @@ public class ZlbAppAuthServiceImpl implements ZlbAppAuthService {
private RestTemplate restTemplate;
@Override
public TokenVO getTokenByTicket(String ticket) {
public Map<String, Object> getTokenByTicket(String ticket) {
//请求zlbApp的接口
//进行接口请求的构造
//1 构造header
......@@ -49,7 +49,27 @@ public class ZlbAppAuthServiceImpl implements ZlbAppAuthService {
HttpEntity<MultiValueMap<String, Object>> httpEntity=new HttpEntity<>(params,headers);
String body = restTemplate.postForEntity(AppConstants.ACCESS_TOKEN_URL, httpEntity, String.class).getBody();
//解析xml
Map<String, Object> valueByNode = XMLParse.getValueByNode(body);
return JSONObject.parseObject(JSONObject.toJSONString(valueByNode), TokenVO.class);
// Map<String, Object> valueByNode =
// JSONObject.parseObject(JSONObject.toJSONString(valueByNode), TokenVO.class)
return XMLParse.getValueByNode(body);
}
@Override
public Map<String, Object> getUserInfoByToken(String token) {
HttpHeaders headers = HeadUtil.getHeader();
//请求body为x-www-form-urlencoded方式
MultiValueMap<String,Object> params = new LinkedMultiValueMap<>();
//servicecode 就是ak
params.add("servicecode",AppConstants.IRS_AK);
params.add("method","getUserInfo");
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddhhmmss");
String format = simpleDateFormat.format(new Date());
params.add("time",format);
params.add("sign", MD5Util.getInstance().getMD5(AppConstants.IRS_AK+AppConstants.IRS_SK+format));
params.add("token",token);
HttpEntity<MultiValueMap<String, Object>> httpEntity=new HttpEntity<>(params,headers);
String body = restTemplate.postForEntity(AppConstants.ACCESS_TOKEN_URL, httpEntity, String.class).getBody();
//解析xml
return XMLParse.getValueByNode(body);
}
}
package com.tykj.zlbapp.util;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.tykj.zlbapp.base.ResultObj;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.MethodParameter;
import org.springframework.http.MediaType;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.server.ServerHttpRequest;
import org.springframework.http.server.ServerHttpResponse;
import org.springframework.web.bind.annotation.RestControllerAdvice;
import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;
/**
* UnifiedReturnConfig.
*
* @author zsp <xhyrzldf@gmail.com>
* @since 2020/10/9 at 3:17 下午
*/
@Configuration
@RestControllerAdvice("com.tykj.zlbapp")
public class UnifiedReturnConfig implements ResponseBodyAdvice<Object> {
private ObjectMapper objectMapper = new ObjectMapper();
@Override
public boolean supports(MethodParameter returnType, Class<? extends HttpMessageConverter<?>> converterType) {
return true;
}
@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,
Class<? extends HttpMessageConverter<?>> selectedConverterType,
ServerHttpRequest request, ServerHttpResponse response) {
// String类型不能直接包装
if (returnType.getGenericParameterType().equals(String.class)) {
try {
// 将数据包装在ResultObj里后转换为json串进行返回
return objectMapper.writeValueAsString(new ResultObj<>(body));
} catch (JsonProcessingException e) {
e.getMessage();
}
}
// 否则直接包装成ResultVo返回
return new ResultObj<>(body);
}
}
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论