在 jersey 单例客户端中刷新 OAUTH2 令牌

时间:2021-05-18 06:59:33

标签: java rest oauth-2.0 jersey-2.0 jersey-client

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

0 个答案:

没有答案