我正在开发需要与 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 小时它工作正常,但之后它不会使用新令牌进行更新。