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

如何解决在 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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?