增加了新版本的认证服务接口

This commit is contained in:
ajaxfan
2021-02-16 09:55:10 +08:00
parent 160c3ec92a
commit 5b5f275a4b
14 changed files with 421 additions and 112 deletions

View File

@ -7,10 +7,9 @@ import lombok.Data;
@Data
public class AuthorityEntity {
private String roleId;
private String roleName;
private String roleCode;
private String roleScope;
private String roleId;
private List<String> authorities;
}

View File

@ -11,6 +11,9 @@ import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
@ -19,7 +22,7 @@ import org.springframework.web.client.RestTemplate;
import org.springframework.web.filter.OncePerRequestFilter;
import com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants;
import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityEntity;
import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityUser;
import lombok.extern.slf4j.Slf4j;
@ -32,7 +35,7 @@ import lombok.extern.slf4j.Slf4j;
public class TokenAuthenticationFilter extends OncePerRequestFilter {
private @Autowired RestTemplate restTemplate;
private @Value("${user.auth.resource.token-info-uri}") String token_uri;
private @Value("${user.auth.resource.userinfo}") String token_uri;
/**
* @param request
@ -71,20 +74,14 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
* @return
*/
private Authentication getAuthentication(String token) {
ResponseEntity<SecurityEntity> entity = restTemplate.getForEntity(createRequestUri(token),
SecurityEntity.class);
HttpHeaders headers = new HttpHeaders();
// 设置安全头
headers.add(HttpHeaders.AUTHORIZATION, String.format("Bearer %s", token));
ResponseEntity<SecurityUser> entity = restTemplate.exchange(token_uri, HttpMethod.GET,
new HttpEntity<String>(headers), SecurityUser.class);
return new UsernamePasswordAuthenticationToken(entity.getBody(), token);
}
/**
* 生成山分认证中心请求接口地址
*
* @param token
* @return
*/
private String createRequestUri(String token) {
return new StringBuilder(token_uri).append("?token=").append(token).toString();
}
}

View File

@ -1,2 +1,2 @@
user.auth.resource.token-info-uri=http://10.242.31.158:8100/mall-auth/oauth/check_token
user.auth.resource.token-info-uri=http://10.242.31.158:8100/core-service-ebtp-userinfo/v1/userinfo/get
user.auth.csrf.disable=true

View File

@ -49,7 +49,7 @@
<groupId>com.chinaunicom.ebtp</groupId>
<artifactId>mall-ebtp-cloud-security-starter</artifactId>
</dependency>
<!--普罗米修斯 -->
<dependency>
<groupId>org.springframework.boot</groupId>
@ -59,12 +59,18 @@
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.60</version>
</dependency>
</dependencies>
<build>

View File

@ -1,9 +1,9 @@
package com.chinaunicom.mall.ebtp.common.base.service;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
import java.util.Collection;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
/**
* 缓存用户service
* 获取缓存用户信息

View File

@ -1,18 +1,18 @@
package com.chinaunicom.mall.ebtp.common.base.service.impl;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
import com.chinaunicom.mall.ebtp.common.util.JsonUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
import java.util.Collection;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.springframework.beans.BeanUtils;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service;
import com.chinaunicom.mall.ebtp.common.base.entity.BaseCacheUser;
import com.chinaunicom.mall.ebtp.common.base.service.IBaseCacheUserService;
import lombok.extern.slf4j.Slf4j;
/**
* 缓存用户service实现层 获取缓存用户信息
*
@ -23,80 +23,27 @@ import java.util.concurrent.ConcurrentHashMap;
@Service
@Slf4j
public class BaseCacheUserServiceImpl implements IBaseCacheUserService {
// TODO 设置种子ID 对其雪花ID长度
private static final long ID_SEED = 1345977833027100000L;
private static final Map<String, BaseCacheUser> USERS = new ConcurrentHashMap<>();
private static final Map<String, BaseCacheUser> USERS = new ConcurrentHashMap<>();
@Override
public BaseCacheUser getCacheUser() {
try {
BaseCacheUser buser = new BaseCacheUser();
BeanUtils.copyProperties(SecurityContextHolder.getContext().getAuthentication().getPrincipal(), buser);
@Override
public BaseCacheUser getCacheUser() {
BaseCacheUser user = null;
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (attributes != null) {
HttpServletRequest request = attributes.getRequest();
String token = request.getHeader("JwtToken");
if (token != null) {
user = USERS.get(token);
}
}
log.info(" --------------- 当前用户信息:" + JsonUtils.objectToJson(user) + " ------------------------------");
return user;
}
log.debug("Current user principal: " + buser);
@Override
public Collection<BaseCacheUser> getUsers() {
return USERS.values();
}
return buser;
} catch (Exception e) {
log.error(e.getMessage());
}
return new BaseCacheUser();
}
/**
* @param string
* @return
*/
// TODO: 山东框架使用未使用雪花ID存放字符串暂时使用该方法进行id转换
private Long getUserId(String rawUid) {
long id = ID_SEED;
byte[] bytes = rawUid.getBytes();
@Override
public Collection<BaseCacheUser> getUsers() {
return USERS.values();
}
for (byte b : bytes) {
id += b;
}
return id;
}
static {
BaseCacheUser user = new BaseCacheUser().setUserId("1").setFullName("采购经理").setLoginName("caigou")
.setRoleIds("caigou").setOrganizationId("100").setOrganizationName("中国联通吉林分公司");
USERS.put(String.valueOf(user.getUserId()), user);
BaseCacheUser user0 = new BaseCacheUser().setUserId("2").setFullName("代理机构管理员").setLoginName("daili-admin")
.setRoleIds("daili-admin").setOrganizationId("100100").setOrganizationName("中兴代理公司");
USERS.put(String.valueOf(user0.getUserId()), user0);
BaseCacheUser user1 = new BaseCacheUser().setUserId("3").setFullName("代理机构子管理员").setLoginName("daili-subadmin")
.setRoleIds("daili-subadmin").setOrganizationId("100100").setOrganizationName("中兴代理公司");
USERS.put(String.valueOf(user1.getUserId()), user1);
BaseCacheUser user2 = new BaseCacheUser().setUserId("4").setFullName("项目经理1").setLoginName("daili1")
.setRoleIds("daili").setOrganizationId("100100").setOrganizationName("中兴代理公司");
USERS.put(String.valueOf(user2.getUserId()), user2);
BaseCacheUser user3 = new BaseCacheUser().setUserId("5").setFullName("项目经理2").setLoginName("daili2")
.setRoleIds("daili").setOrganizationId("100100").setOrganizationName("中兴代理公司");
USERS.put(String.valueOf(user3.getUserId()), user3);
for (int i = 0; i < 5; i++) {
BaseCacheUser user4 = new BaseCacheUser().setUserId(String.valueOf(6 + i)).setFullName("专家" + (i + 1))
.setLoginName("1300000000" + (i + 1)).setRoleIds("zhuanjia").setOrganizationId("666")
.setOrganizationName("专家公司");
USERS.put(String.valueOf(user4.getUserId()), user4);
}
for (int i = 0; i < 5; i++) {
BaseCacheUser user4 = new BaseCacheUser().setUserId(String.valueOf(11 + i)).setFullName("供应商" + (i + 1))
.setLoginName("gys" + (i + 1)).setRoleIds("gys").setOrganizationId("200" + (i + 1))
.setOrganizationName("供应商公司" + (i + 1));
USERS.put(String.valueOf(user4.getUserId()), user4);
}
}
}

View File

@ -1,7 +1,10 @@
package com.chinaunicom.mall.ebtp.common.config;
import javax.servlet.http.HttpServletRequest;
import static com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.AUTHORIZATION_HEADER;
import static com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.TOKEN_PREFIX;
import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
@ -15,14 +18,22 @@ import feign.RequestTemplate;
@Configuration
public class FeignConfig implements RequestInterceptor {
/**
* @param template
*/
@Override
public void apply(RequestTemplate template) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
if (null != attributes) {
HttpServletRequest request = attributes.getRequest();
String token = request.getHeader("JwtToken");
template.header("JwtToken", token);
final String header = attributes.getRequest().getHeader(AUTHORIZATION_HEADER);// 提取request头信息
// 检查请求头是否包含 Bearer 前缀
if (StringUtils.startsWith(header, TOKEN_PREFIX)) {
String authToken = RegExUtils.replaceAll(header, TOKEN_PREFIX, "");// 提取 token 信息
template.header(AUTHORIZATION_HEADER, String.format("%s%s", TOKEN_PREFIX, authToken));
}
}
}

View File

@ -1,8 +1,10 @@
package com.chinaunicom.mall.ebtp.common.config;
import java.util.List;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.ByteArrayHttpMessageConverter;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.ResourceHttpMessageConverter;
@ -11,9 +13,7 @@ import org.springframework.http.converter.json.MappingJackson2HttpMessageConvert
import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import java.util.List;
/**
* @author dino

View File

@ -0,0 +1,47 @@
package com.chinaunicom.mall.ebtp.common.uniBss.constant;
import java.util.HashMap;
import java.util.Map;
public class UniBssConstant {
public static String RESP_CODE_00000 = "00000";// 成功
public static String RESP_CODE_A00001 = "A00001";//app_id校验失败
public static String RESP_CODE_A00002 = "A00002";//应用未订购服务、Token解析失败
public static String RESP_CODE_A00003 = "A00003";//请求IP不在源IP允许范围内
public static String RESP_CODE_A00004 = "A00004";//所有能力日总调用次数超过阀值
public static String RESP_CODE_A00005 = "A00005";//此能力日总调用次数超过阀值
public static String RESP_CODE_A00006 = "A00006";//所有能力并发请求数超过阀值
public static String RESP_CODE_A00007 = "A00007";//此能力并发请求数超过阀值
public static String RESP_CODE_A00008 = "A00008";//所有能力时间段内调用次数超过阀值
public static String RESP_CODE_A88888 = "A88888";//下游返回错误的集合体
public static String RESP_CODE_A99997 = "A99997";//请求报文校验出错
public static String RESP_CODE_A99999 = "A99999";//服务没有签到
public static String RESP_CODE_C10000 = "C10000";//请求url格式校验错误
public static String RESP_CODE_C10001 = "C10001";//请求服务标识错误
public static String RESP_CODE_C10002 = "C10002";//请求能力标识错误
public static String RESP_CODE_N20000 = "N20000";//能力调用超时
private static Map<String,String> RESP_CODE_Map = new HashMap();
static {
RESP_CODE_Map.put(RESP_CODE_00000 , "成功");
RESP_CODE_Map.put(RESP_CODE_A00001, "app_id校验失败");
RESP_CODE_Map.put(RESP_CODE_A00002, "应用未订购服务、Token解析失败");
RESP_CODE_Map.put(RESP_CODE_A00003, "请求IP不在源IP允许范围内");
RESP_CODE_Map.put(RESP_CODE_A00004, "所有能力日总调用次数超过阀值");
RESP_CODE_Map.put(RESP_CODE_A00005, "此能力日总调用次数超过阀值");
RESP_CODE_Map.put(RESP_CODE_A00006, "所有能力并发请求数超过阀值");
RESP_CODE_Map.put(RESP_CODE_A00007, "此能力并发请求数超过阀值");
RESP_CODE_Map.put(RESP_CODE_A00008, "所有能力时间段内调用次数超过阀值");
RESP_CODE_Map.put(RESP_CODE_A88888, "下游返回错误的集合体");
RESP_CODE_Map.put(RESP_CODE_A99997, "请求报文校验出错");
RESP_CODE_Map.put(RESP_CODE_A99999, "服务没有签到");
RESP_CODE_Map.put(RESP_CODE_C10000, "请求url格式校验错误");
RESP_CODE_Map.put(RESP_CODE_C10001, "请求服务标识错误");
RESP_CODE_Map.put(RESP_CODE_C10002, "请求能力标识错误");
RESP_CODE_Map.put(RESP_CODE_N20000, "能力调用超时");
}
public static String getRESP_CODE_Map(String state) {
return RESP_CODE_Map.get(state);
}
}

View File

@ -0,0 +1,21 @@
package com.chinaunicom.mall.ebtp.common.uniBss.entity;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;
/**
* 实体类 总
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
public class UniBss{
@JSONField(name = "UNI_BSS_ATTACHED")
private UniBssAttached uniBssAttached;
@JSONField(name = "UNI_BSS_BODY")
private UniBssBody uniBssBody;
@JSONField(name = "UNI_BSS_HEAD")
private UniBssHead uniBssHead;
}

View File

@ -0,0 +1,20 @@
package com.chinaunicom.mall.ebtp.common.uniBss.entity;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 实体类 暂时没用
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
public class UniBssAttached implements Serializable {
@JSONField(name = "MEDIA_INFO")
private String mediaInf;
}

View File

@ -0,0 +1,25 @@
package com.chinaunicom.mall.ebtp.common.uniBss.entity;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
/**
* 实体类 业务参数实体类
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
public class UniBssBody implements Serializable {
@JSONField(name = "SINGLE_ORDER_QRY_REQ")
private Map<String, String> singleOrderQryReq = new HashMap<>();
@JSONField(name = "SINGLE_ORDER_QRY_RSP")
private String singleOrderQryRsp;
}

View File

@ -0,0 +1,29 @@
package com.chinaunicom.mall.ebtp.common.uniBss.entity;
import com.alibaba.fastjson.annotation.JSONField;
import lombok.Data;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* 实体类 天擎权限
*
* @auto.generated
*/
@Data
@Accessors(chain = true)
public class UniBssHead implements Serializable {
@JSONField(name = "APP_ID")
private String appId;
@JSONField(name = "TIMESTAMP")
private String timeStamp;
@JSONField(name = "TRANS_ID")
private String transId;
@JSONField(name = "TOKEN")
private String token;
@JSONField(name = "RESP_DESC")
private String respDesc;
@JSONField(name = "RESP_CODE")
private String respCode;
}

View File

@ -0,0 +1,207 @@
package com.chinaunicom.mall.ebtp.common.uniBss.service;
import cn.hutool.core.exceptions.ExceptionUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.chinaunicom.mall.ebtp.common.uniBss.entity.UniBss;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.MessageDigest;
import java.util.HashMap;
import java.util.Map;
@Slf4j
public class UniBssServiceImpl {
/**
* 天擎token 32位MD5小写加密
* @param str 未加密字符串
* @return
*/
public static String MD5min(String str) {
String result = "";
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update((str).getBytes("UTF-8"));
byte b[] = md5.digest();
int i;
StringBuffer buf = new StringBuffer("");
for(int offset=0; offset<b.length; offset++){
i = b[offset];
if(i<0){
i+=256;
}
if(i<16){
buf.append("0");
}
buf.append(Integer.toHexString(i));
}
result = buf.toString();
return result;
} catch (Exception e) {
return null;
}
}
/**
* 天擎http+post调用
* @param path 接口地址
* @param data 接口参数 json字符串
* @return
*/
public static String uniBssHttpPost(String path,String data) {
String str = "";
try {
URL url = new URL(path);
//打开和url之间的连接
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
PrintWriter out = null;
/**设置URLConnection的参数和普通的请求属性****start***/
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
conn.setRequestProperty("Accept-Encoding", "");
/**设置URLConnection的参数和普通的请求属性****end***/
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");//GET和POST必须全大写
/**GET方法请求*****start*/
/**
* 如果只是发送GET方式请求使用connet方法建立和远程资源之间的实际连接即可
* 如果发送POST方式的请求需要获取URLConnection实例对应的输出流来发送请求参数。
* */
// conn.connect();
/**GET方法请求*****end*/
/***POST方法请求****start*/
out = new PrintWriter(conn.getOutputStream());//获取URLConnection对象对应的输出流
out.print(data);//发送请求参数即数据
out.flush();//缓冲数据
/***POST方法请求****end*/
//获取URLConnection对象对应的输入流
InputStream is = conn.getInputStream();
//构造一个字符流缓存
BufferedReader br = new BufferedReader(new InputStreamReader(is));
String line = br.readLine();
while (line != null) {
str=new String(line.getBytes(),"UTF-8");//解决中文乱码问题
System.out.println(str);
line = br.readLine();
}
//关闭流
is.close();
//断开连接最好写上disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
//固定多线程的话如果不disconnect链接会增多直到收发不出信息。写上disconnect后正常一些。
conn.disconnect();
//System.out.println("完整结束");
} catch (Exception e) {
e.printStackTrace();
}
return str;
}
/**
* 天擎http+post调用
* @param rsp 接口参数 json字符串
* @return
*/
public static Map<String,String> uniBssRspToMap(String rsp) {
Map<String,String> map = new HashMap();
try{
String qs[] = rsp.split("\n");
for(String q : qs){
if(q.indexOf("signMsg=")>=0){
String qs2 = q.substring("signMsg=".length(),q.length());
map.put("signMsg", qs2);
}else {
String qs2[] = q.split("=");
map.put(qs2[0], qs2.length > 1 && qs2[1] != null && !"".equals(qs2[1]) ? qs2[1] : "");
}
}
}catch (Exception e){
log.info(ExceptionUtil.stacktraceToString(e));
}
return map;
}
public static void main(String arge[]){
/* String rsp = "signMsg=xxxdfsdfs==";
Map map = uniBssRspToMap(rsp);
System.out.println(map);*/
/* SignMsgGenFacadeImpl sing = new SignMsgGenFacadeImpl();
sing.app_id = "2ICalrrQ0F";
sing.app_secret = "1mb6n6635cJkDb3pEQPUFXc2nRJ8RPaS";
Date date = new Date();
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS");
SimpleDateFormat format2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");
String TIMESTAMP = format.format(date);
String TRANS_ID = format2.format(date)+(int)((Math.random()*9+1)*100000);
String s = "APP_ID+"+sing.app_id+"+TIMESTAMP"+TIMESTAMP+"TRANS_ID"+TRANS_ID+sing.app_secret;
String token = MD5min(s);
uniBss uniBss = new uniBss();
uniBss.setUniBssAttached(new uniBssAttached().setMediaInf(""));
uniBssHead head = new uniBssHead();
head.setAppId(sing.app_id);
head.setTimeStamp(TIMESTAMP);
head.setTransId(TRANS_ID);
head.setToken(token);
uniBss.setUniBssHead(head);
uniBssBody body = new uniBssBody();
try {
//List<BizBidPayConfigure> configList = this.ibizBidPayConfigureService.getlist(new BizBidPayConfigure());
//Map<String, String> configMap = Utils.getConfigListToMap(configList);
body.getSingleOrderQryReq().put("merNo", "301104010018985");//商户号
body.getSingleOrderQryReq().put("orderDate", "20210201");
body.getSingleOrderQryReq().put("orderNo", "0000000011101202102011547080010");//订单号
body.getSingleOrderQryReq().put("charSet", "UTF-8");
body.getSingleOrderQryReq().put("signType", "RSA_SHA256");
String signMsg = null;
//signMsg = this.getSignMsg(body.getSINGLE_ORDER_QRY_REQ().get("merNo"),body.getSINGLE_ORDER_QRY_REQ().get("signType"),body.getSINGLE_ORDER_QRY_REQ().get("charSet"),body.getSINGLE_ORDER_QRY_REQ());
body.getSingleOrderQryReq().put("signMsg", signMsg);
uniBss.setUniBssBody(body);
String json = JSON.toJSONString(uniBss);
System.out.println(json);
}catch (Exception e){
}*/
//String a ="[{\"APP_ID\":\"1\"}]";
//List<UniBssHead> head = JSONArray.parseArray(a,UniBssHead.class);
/* String s = "{\"UNI_BSS_ATTACHED\":{\"MEDIA_INFO\":\"\"},\"UNI_BSS_BODY\":{\"SINGLE_ORDER_QRY_REQ\":{\"charSet\":\"UTF-8\",\"orderNo\":\"0000000011101202102011547080010\",\"merNo\":\"301104010018985\",\"signType\":\"RSA_SHA256\",\"signMsg\":\"RL3m4USZyNsr9NWh2t5Qa8foJv43PgEfv3FFe%2Bf2E4JX8a52%2Bjr3ygadp%2FYwz%2B0YEOK7YfjqyHpEh%2Fp6QpeXCEbDndKW5xKPv6auRpzYjU6saweAZScXeyEXL%2BnLc1bkaOUHMr27XWEq5LB%2Be%2FeFTJHNILUVUhuEtQVC2fF6xODNggZAEbFJB3y4Ouslcq5tTTOveO%2FBo%2Beh8gxLU5zJoN3zwnvRcu%2Fj7Enmc1jdwT5xUiIGkcU745uIyKtriodDYZS6nfg306H0uEubGADIOFdTnzF99am2hhm1yDzLMcR6incV4oANRlm4GNA79sRhXEC0f%2FQz6Jn%2FkncoDQQu7Q%3D%3D\",\"orderDate\":\"20210201\"}},\"UNI_BSS_HEAD\":{\"APP_ID\":\"2ICalrrQ0F\",\"TIMESTAMP\":\"2021-02-01 19:20:51 155\",\"TRANS_ID\":\"20210201192051155595697\",\"TOKEN\":\"e95a390345d88db8395fe0b94229c9bb\"}}";
String str = uniBssHttpPost("http://10.124.150.230:8000/api/epay/upay/singleOrderQry/v1",s);
UniBss uniBss = JSONArray.parseObject(str,UniBss.class);
System.out.println(uniBss.getUniBssHead().getRespDesc());
String rsp = String.valueOf(uniBss.getUniBssBody().getSingleOrderQryRsp());
String qs[] = rsp.split("\n");
Map<String,String> map = new HashMap();
for(String q : qs){
String qs2[] = q.split("=");
map.put(qs2[0], qs2.length>1&&qs2[1]!=null&&!"".equals(qs2[1])?qs2[1]:"");
}
System.out.println(map);*/
}
}