如何解决在 jersey 单例客户端中刷新 OAUTH2 令牌
我正在开发需要与 Oauth2 服务集成的应用程序。令牌的有效期为 4 小时。我们正在使用单例客户端连接到端点。问题是客户端在 4 小时后未更新令牌,从而导致未经授权的访问错误。代码如下..
球衣客户端的创建
public class SingletonClass {
private static Client wsClient = null;
public static synchronized Client getWsClient() {
if(wsClient == null) {
return wsClient = ClientBuilder.newBuilder()
.build();
}
return wsClient;
}
}
使用服务获取票
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.client.Invocation.Builder;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.glassfish.jersey.client.oauth2.oauth2clientSupport;
import org.json.simple.JSONObject;
public class RestService {
public void mainMethod() {
callEndpoint(getLoginToken());
}
public String getLoginToken() {
String serviceURL = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
WebTarget webTarget = SingletonClass.getWsClient()
.target(serviceURL);
Builder builder = webTarget.request(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON);
Response r = builder.post(Entity.entity(null,MediaType.APPLICATION_JSON));
JSONObject js= r.readEntity(JSONObject.class);
return js.get("token").toString();
}
public static String callEndpoint(String token) {
String serviceURL ="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
WebTarget webTarget = SingletonClass.getWsClient().register(oauth2clientSupport.feature(token))
.target(serviceURL);
Builder builder = webTarget.request(MediaType.APPLICATION_JSON).accept(MediaType.APPLICATION_JSON);
Object obg = new Object();
Response r = builder.post(Entity.entity(obg,MediaType.APPLICATION_JSON));
return r.readEntity(String.class);
}
}
前 4 小时它工作正常,但之后它不会使用新令牌进行更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。