From 8059e0e2ae8142747283eaac68fc640cf372d687 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?=E4=BB=98=E5=BA=86=E5=90=89?= <51312040@qq.com>
Date: Mon, 28 Feb 2022 15:35:00 +0800
Subject: [PATCH] =?UTF-8?q?v2.1.0=20:=201=E3=80=81=E6=96=B0=E5=A2=9Eapollo?=
=?UTF-8?q?=E7=83=AD=E5=8A=A0=E8=BD=BDappliacation.properties=202=E3=80=81?=
=?UTF-8?q?=E6=96=B0=E5=A2=9Efeign=E6=8E=A5=E5=8F=A3=E6=97=A0token?=
=?UTF-8?q?=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E6=B7=BB=E5=8A=A0=E4=B8=B4?=
=?UTF-8?q?=E6=97=B6token=203=E3=80=81=E6=8B=A6=E6=88=AA=E6=89=80=E6=9C=89?=
=?UTF-8?q?controller=E6=8E=A5=E5=8F=A3=EF=BC=8C=E8=BF=9B=E8=A1=8Ctoken?=
=?UTF-8?q?=E6=A0=A1=E9=AA=8C=EF=BC=8C=E5=90=8C=E6=97=B6=E6=B7=BB=E5=8A=A0?=
=?UTF-8?q?apollo=E7=99=BD=E5=90=8D=E5=8D=95=E5=8A=9F=E8=83=BD?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
mall-ebtp-cloud-jpa-starter/pom.xml | 4 +-
mall-ebtp-cloud-kafka-starter/pom.xml | 4 +-
mall-ebtp-cloud-parent/pom.xml | 12 +--
pom.xml | 2 +-
uboot-common/pom.xml | 4 +-
.../apollo/starter/ApolloHotLoading.java | 55 ++++++++++++
.../starter/UserAuthenticationEntryPoint.java | 6 +-
.../security/starter/common/Constants.java | 2 -
.../starter/config/BrowserSecurityConfig.java | 4 +-
.../security/starter/entity/AuthAllows.java | 23 +++++
.../filter/TokenAuthenticationFilter.java | 85 +++++++++++--------
.../mall/ebtp/common/config/FeignConfig.java | 76 +++++++++++++++--
uboot-core/pom.xml | 6 +-
13 files changed, 224 insertions(+), 59 deletions(-)
create mode 100644 uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/apollo/starter/ApolloHotLoading.java
create mode 100644 uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/entity/AuthAllows.java
diff --git a/mall-ebtp-cloud-jpa-starter/pom.xml b/mall-ebtp-cloud-jpa-starter/pom.xml
index baa84d1..8594737 100644
--- a/mall-ebtp-cloud-jpa-starter/pom.xml
+++ b/mall-ebtp-cloud-jpa-starter/pom.xml
@@ -7,13 +7,13 @@
com.chinaunicom.ebtp
mall-ebtp-cloud-parent
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
../mall-ebtp-cloud-parent
com.chinaunicom.ebtp
mall-ebtp-cloud-jpa-starter
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
mall-ebtp-cloud-jpa-starter
diff --git a/mall-ebtp-cloud-kafka-starter/pom.xml b/mall-ebtp-cloud-kafka-starter/pom.xml
index 7750a01..79defba 100644
--- a/mall-ebtp-cloud-kafka-starter/pom.xml
+++ b/mall-ebtp-cloud-kafka-starter/pom.xml
@@ -8,13 +8,13 @@
com.chinaunicom.ebtp
mall-ebtp-cloud-parent
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
../mall-ebtp-cloud-parent
com.chinaunicom.ebtp
mall-ebtp-cloud-kafka-starter
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
mall-ebtp-cloud-kafka-starter
diff --git a/mall-ebtp-cloud-parent/pom.xml b/mall-ebtp-cloud-parent/pom.xml
index bc1f859..8c1b4a7 100644
--- a/mall-ebtp-cloud-parent/pom.xml
+++ b/mall-ebtp-cloud-parent/pom.xml
@@ -7,12 +7,12 @@
com.chinaunicom.ebtp
mall-ebtp-cloud
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
com.chinaunicom.ebtp
mall-ebtp-cloud-parent
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
pom
mall-ebtp-cloud-parent
@@ -21,22 +21,22 @@
com.chinaunicom.ebtp
mall-ebtp-cloud-jpa-starter
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
com.chinaunicom.ebtp
mall-ebtp-cloud-kafka-starter
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
com.chinaunicom.mall.ebtp
uboot-common
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
com.chinaunicom.mall.ebtp
uboot-core
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
diff --git a/pom.xml b/pom.xml
index ff7c3dd..15080f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -13,7 +13,7 @@
com.chinaunicom.ebtp
mall-ebtp-cloud
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
pom
mall-ebtp-cloud
diff --git a/uboot-common/pom.xml b/uboot-common/pom.xml
index 16dad54..2ee65bf 100644
--- a/uboot-common/pom.xml
+++ b/uboot-common/pom.xml
@@ -6,13 +6,13 @@
com.chinaunicom.ebtp
mall-ebtp-cloud-parent
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
../mall-ebtp-cloud-parent
com.chinaunicom.mall.ebtp
uboot-common
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
uboot-common
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/apollo/starter/ApolloHotLoading.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/apollo/starter/ApolloHotLoading.java
new file mode 100644
index 0000000..12d6078
--- /dev/null
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/apollo/starter/ApolloHotLoading.java
@@ -0,0 +1,55 @@
+package com.chinaunicom.mall.ebtp.cloud.apollo.starter;
+
+
+import com.ctrip.framework.apollo.model.ConfigChange;
+import com.ctrip.framework.apollo.model.ConfigChangeEvent;
+import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.BeansException;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.stereotype.Component;
+
+/**
+ * @author f
+ */
+@Slf4j
+@Component
+@Configuration
+public class ApolloHotLoading implements ApplicationContextAware {
+
+ private ApplicationContext applicationContext;
+ @Value("${spring.application.name}")
+ private String applicationName;
+
+ @Override
+ public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
+ this.applicationContext = applicationContext;
+ }
+
+
+ @ApolloConfigChangeListener()
+ private void someChangeHandler(ConfigChangeEvent changeEvent) {
+ log.info(" ------------------- {} apolloHotLoading start ------------------", applicationName);
+
+ for (String changedKey : changeEvent.changedKeys()) {
+
+ ConfigChange configChange = changeEvent.getChange(changedKey);
+ String oldValue = configChange.getOldValue();
+ String newValue = configChange.getNewValue();
+ log.info("changedKey:【{}】,oldValue=【{}】, newValue:【{}】", changedKey, oldValue, newValue);
+ }
+
+ refreshProperties(changeEvent);
+
+ log.info(" ------------------- {} apolloHotLoading end ------------------", applicationName);
+ }
+
+ public void refreshProperties(ConfigChangeEvent changeEvent) {
+ // 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
+ this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
+ }
+}
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/UserAuthenticationEntryPoint.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/UserAuthenticationEntryPoint.java
index ac0eb1a..78bf737 100644
--- a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/UserAuthenticationEntryPoint.java
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/UserAuthenticationEntryPoint.java
@@ -4,6 +4,7 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.http.HttpStatus;
+import org.springframework.security.authentication.InsufficientAuthenticationException;
import org.springframework.security.core.AuthenticationException;
import org.springframework.security.web.AuthenticationEntryPoint;
@@ -41,7 +42,10 @@ public class UserAuthenticationEntryPoint implements AuthenticationEntryPoint {
response.setContentType(RESPONSE_CONTENT_TYPE);
String code = (String) request.getSession().getAttribute("code");// security filter 返回的自定义状态码
-
+ //未获取到token 且不在白名单
+ if (authException instanceof InsufficientAuthenticationException) {
+ code = REMOTE_ACCESS_FAILURE;
+ }
Map map = adapterException(StringUtils.defaultIfBlank(code, DEFAULT_ERROR_MESSAGE), response);
map.put("success", false);
map.put("path", request.getServletPath());
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/common/Constants.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/common/Constants.java
index 160fce6..8e7789a 100644
--- a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/common/Constants.java
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/common/Constants.java
@@ -9,10 +9,8 @@ public interface Constants {
public static final String TOKEN_PREFIX = "Bearer ";
public static final String CURRENT_ROLE_CODE = "currentRoleCode";
public static final String COOKIE_TOKEN_CODE = "mall3_token";
- public static final String NO_AUTH = "0klui7pj90000bx04lxf";
public static final String TOKEN_EXPIRED = "90401";
public static final String REMOTE_ACCESS_FAILURE = "90500";
- public static final String NO_AUTH_TOKEN = "0kluipxcr0000831ztrl";
}
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/config/BrowserSecurityConfig.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/config/BrowserSecurityConfig.java
index eaf446f..ba84f19 100644
--- a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/config/BrowserSecurityConfig.java
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/config/BrowserSecurityConfig.java
@@ -44,7 +44,9 @@ public class BrowserSecurityConfig extends WebSecurityConfigurerAdapter {
.sessionCreationPolicy(SessionCreationPolicy.STATELESS).and()
.addFilterBefore(authenticationTokenFilterBean(), UsernamePasswordAuthenticationFilter.class)
// 只对业务节点请求做认证处理
- .authorizeRequests().antMatchers("/v1/**").authenticated().and().httpBasic().and().csrf().disable();
+// .authorizeRequests().antMatchers("/v1/**").authenticated().and()
+ .authorizeRequests().anyRequest().authenticated().and()
+ .httpBasic().and().csrf().disable();
}
}
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/entity/AuthAllows.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/entity/AuthAllows.java
new file mode 100644
index 0000000..41e8520
--- /dev/null
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/entity/AuthAllows.java
@@ -0,0 +1,23 @@
+package com.chinaunicom.mall.ebtp.cloud.security.starter.entity;
+
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.List;
+
+/**
+ * @author f
+ */
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "allow")
+@Accessors(chain = true)
+public class AuthAllows {
+
+ private List apis;
+
+}
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/filter/TokenAuthenticationFilter.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/filter/TokenAuthenticationFilter.java
index 2fe1ee0..e168f7f 100644
--- a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/filter/TokenAuthenticationFilter.java
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/cloud/security/starter/filter/TokenAuthenticationFilter.java
@@ -2,6 +2,7 @@ package com.chinaunicom.mall.ebtp.cloud.security.starter.filter;
import cn.hutool.core.bean.BeanUtil;
import com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants;
+import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.AuthAllows;
import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.RoleCodeAuthority;
import com.chinaunicom.mall.ebtp.cloud.security.starter.entity.SecurityUser;
import com.chinaunicom.mall.ebtp.cloud.userinfo.starter.service.UserInfoService;
@@ -11,7 +12,6 @@ import org.apache.commons.lang3.RegExUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.remoting.RemoteTimeoutException;
-import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
@@ -22,10 +22,8 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
-import java.util.Collections;
-import java.util.List;
-import java.util.Objects;
-import java.util.Optional;
+import java.util.*;
+import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@@ -38,9 +36,12 @@ import static com.chinaunicom.mall.ebtp.cloud.security.starter.common.Constants.
*/
@Slf4j
public class TokenAuthenticationFilter extends OncePerRequestFilter {
+ @Autowired
+ private UserInfoService client;
- private @Autowired
- UserInfoService client;
+
+ @Autowired
+ private AuthAllows allows;
/**
* @param request
@@ -52,37 +53,39 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(final HttpServletRequest request, final HttpServletResponse response,
final FilterChain filterChain) throws ServletException, IOException {
- if (!StringUtils.contains(request.getRequestURI(), "actuator/prometheus")) {
- log.info("--------" + request.getMethod() + " - " + request.getRequestURI() + "?" + Optional.ofNullable(request.getQueryString()).orElse(""));
+ String api = request.getRequestURI();
+ String method = request.getMethod();
+ if (!StringUtils.contains(api, "actuator/prometheus")) {
+ log.info("--------" + method + " - " + api + "?" + Optional.ofNullable(request.getQueryString()).orElse(""));
}
// 清空上下文中的缓存信息, 防止二次请求时数据异常 (如此, 每次有新的请求进入,都会进行token的验证)
SecurityContextHolder.getContext().setAuthentication(null);
+ boolean isWhite = checkWhiteList(api, method);
+ if (isWhite) {
+ isNullThenAssignDefault();
+ }
+
// 提取request头信息
final String header = request.getHeader(AUTHORIZATION_HEADER);
final String currentRoleCode = request.getHeader(CURRENT_ROLE_CODE);
- boolean skip = !StringUtils.equals(request.getHeader(NO_AUTH), NO_AUTH_TOKEN);
try {
- if (skip) {
- // 检查请求头是否包含 Bearer 前缀
- if (StringUtils.startsWith(header, Constants.TOKEN_PREFIX)) {
- setAuthentication(currentRoleCode, RegExUtils.replaceAll(header, Constants.TOKEN_PREFIX, ""));// 移除header的前缀,提取出token字串
- }
- // 检查cookie
- else {
- Optional.ofNullable(request.getCookies())
- .flatMap(cookies ->
- Stream.of(cookies)
- .filter(item -> StringUtils.equals(item.getName(), COOKIE_TOKEN_CODE))
- .findFirst())
- .ifPresent(cookie -> setAuthentication(currentRoleCode, cookie.getValue()));
- }
+ // 检查请求头是否包含 Bearer 前缀
+ if (StringUtils.startsWith(header, Constants.TOKEN_PREFIX)) {
+ setAuthentication(currentRoleCode, RegExUtils.replaceAll(header, Constants.TOKEN_PREFIX, ""), isWhite);// 移除header的前缀,提取出token字串
+ }
+ // 检查cookie
+ else {
+ Optional.ofNullable(request.getCookies())
+ .flatMap(cookies ->
+ Stream.of(cookies)
+ .filter(item -> StringUtils.equals(item.getName(), COOKIE_TOKEN_CODE))
+ .findFirst())
+ .ifPresent(cookie -> setAuthentication(currentRoleCode, cookie.getValue(), isWhite));
}
- // TODO 临时放行未传递token且session中未包含access token信息的服务调用
- isNullThenAssignDefault();
} catch (Exception e) {
request.getSession().setAttribute("code", e.getMessage());
log.error(e.getMessage());
@@ -90,14 +93,27 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
filterChain.doFilter(request, response);
}
+ /**
+ * 白名单验证
+ *
+ * @param method url地址
+ * @param methodType 请求方式 GET
+ * @return
+ */
+ private boolean checkWhiteList(String method, String methodType) {
+ return Optional.ofNullable(allows.getApis()).orElseGet(ArrayList::new)
+ .parallelStream().anyMatch(reg -> Pattern.compile(reg).matcher(methodType + "." + method).matches());
+ }
+
+
/**
* 设置认证用户信息
*
* @param currentRoleCode
* @param authToken
*/
- private void setAuthentication(final String currentRoleCode, final String authToken) {
- SecurityContextHolder.getContext().setAuthentication(getAuthentication(authToken, currentRoleCode));
+ private void setAuthentication(final String currentRoleCode, final String authToken, final boolean isWhite) {
+ SecurityContextHolder.getContext().setAuthentication(getAuthentication(authToken, currentRoleCode, isWhite));
}
/**
@@ -106,16 +122,17 @@ public class TokenAuthenticationFilter extends OncePerRequestFilter {
* @param token
* @return
*/
- private Authentication getAuthentication(final String token, final String currentRoleCode) {
+ private Authentication getAuthentication(final String token, final String currentRoleCode,
+ final boolean isWhite) {
BaseCacheUser userInfo = client.getUserInfo(token);
-
if (Objects.isNull(userInfo)) {// 对象为空, 则说明网络异常feign已熔断
- throw new RemoteTimeoutException(REMOTE_ACCESS_FAILURE);
- }
+ if (!isWhite) {
+ throw new RemoteTimeoutException(REMOTE_ACCESS_FAILURE);
+ } else {
+ return new UsernamePasswordAuthenticationToken(new SecurityUser(), null, null);
+ }
- if (Objects.isNull(userInfo.getUserId())) {// userid 为空则访问山分认证服务返回信息为null
- throw new AccessDeniedException(TOKEN_EXPIRED);
}
SecurityUser securityUser = BeanUtil.toBean(userInfo, SecurityUser.class);
// 根据当前角色设定权限列表
diff --git a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/common/config/FeignConfig.java b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/common/config/FeignConfig.java
index 6ff0ec4..c74d779 100644
--- a/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/common/config/FeignConfig.java
+++ b/uboot-common/src/main/java/com/chinaunicom/mall/ebtp/common/config/FeignConfig.java
@@ -1,5 +1,7 @@
package com.chinaunicom.mall.ebtp.common.config;
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
import feign.RequestInterceptor;
import feign.RequestTemplate;
import lombok.Setter;
@@ -7,9 +9,17 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
+import org.springframework.http.HttpHeaders;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
+import javax.servlet.http.Cookie;
+import java.io.BufferedReader;
+import java.io.DataOutputStream;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.nio.charset.StandardCharsets;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
@@ -81,14 +91,70 @@ public class FeignConfig implements RequestInterceptor {
if (StringUtils.startsWith(header, TOKEN_PREFIX)) {
template.header(AUTHORIZATION_HEADER, header);
} else {// 检查cookie
- Optional.ofNullable(attributes.getRequest().getCookies())
+ Optional cookie = Optional.ofNullable(attributes.getRequest().getCookies())
.flatMap(cookies -> Stream.of(cookies)
.filter(item -> StringUtils.equals(item.getName(), COOKIE_TOKEN_CODE)
- ).findFirst()).ifPresent(token -> {
- String authToken = token.getValue();
+ ).findFirst());
+ if (cookie.isPresent()) {
+ String authToken = cookie.get().getValue();
template.header(AUTHORIZATION_HEADER, String.format("%s%s", TOKEN_PREFIX, authToken));
- });
+ } else {
+ String access_token = getAccessToken();
+ log.info("token=======access_token==="+access_token);
+ template.header(HttpHeaders.AUTHORIZATION,String.format("%s%s", TOKEN_PREFIX, access_token));
+ }
}
}
-
+ @Value("${client.clientHttpUrl}")
+ private String clientHttpUrl;
+ public String getAccessToken () {
+ StringBuffer strBf = new StringBuffer();
+ try {
+ log.info("token=======access_token===clientHttpUrl==="+clientHttpUrl);
+ URL realUrl = new URL(clientHttpUrl);
+ //将realUrl以 open方法返回的urlConnection 连接强转为HttpURLConnection连接 (标识一个url所引用的远程对象连接)
+ // 此时cnnection只是为一个连接对象,待连接中
+ HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
+ //设置连接输出流为true,默认false (post请求是以流的方式隐式的传递参数)
+ connection.setDoOutput(true);
+ //设置连接输入流为true
+ connection.setDoInput(true);
+ //设置请求方式为post
+ connection.setRequestMethod("POST");
+ //post请求缓存设为false
+ connection.setUseCaches(false);
+ //设置该HttpURLConnection实例是否自动执行重定向
+ connection.setInstanceFollowRedirects(true);
+ //设置请求头里面的各个属性 (以下为设置内容的类型,设置为经过urlEncoded编码过的from参数)
+ connection.setRequestProperty("Content-Type", "application/json;charset=utf-8");
+ //建立连接 (请求未开始,直到connection.getInputStream()方法调用时才发起,以上各个参数设置需在此方法之前进行)
+ log.info("token=======access_token===建立连接===");
+ connection.connect();
+ log.info("token=======access_token===创建输入输===");
+ //创建输入输出流,用于往连接里面输出携带的参数,(输出内容为?后面的内容)
+ DataOutputStream dataout = new DataOutputStream(connection.getOutputStream());
+// //将参数输出到连接
+ // 输出完成后刷新并关闭流
+ dataout.flush();
+ dataout.close(); // 重要且易忽略步骤 (关闭流,切记!)
+ log.info("token=======access_token===reader===");
+ BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
+ String lines;
+ while ((lines = reader.readLine()) != null) {
+ lines = new String(lines.getBytes(), StandardCharsets.UTF_8);
+ strBf.append(lines);
+ }
+ reader.close();
+ connection.disconnect();
+ log.info("toke返回数据:---------------------- "+strBf.toString());
+ } catch (Exception e) {
+ log.info("toke返回数据:----------------------失败 "+e.getMessage());
+ }
+ log.info("toke返回数据:----------strBf------------ "+strBf.toString());
+ JSONObject json= JSON.parseObject(strBf.toString());
+ if((boolean)json.get("success")){
+ return ((JSONObject)json.get("data")).get("value").toString();
+ }
+ return null;
+ }
}
diff --git a/uboot-core/pom.xml b/uboot-core/pom.xml
index 9b278ca..01bd074 100644
--- a/uboot-core/pom.xml
+++ b/uboot-core/pom.xml
@@ -6,13 +6,13 @@
com.chinaunicom.ebtp
mall-ebtp-cloud-parent
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
../mall-ebtp-cloud-parent
com.chinaunicom.mall.ebtp
uboot-core
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT
uboot-core
@@ -20,7 +20,7 @@
com.chinaunicom.mall.ebtp
uboot-common
- 2.0.1-SNAPSHOT
+ 2.1.0-SNAPSHOT