当前位置: 首页 > 知识库问答 >
问题:

Apache Cxf Webclient在Tomee 8中无法正常工作

宇文曦
2023-03-14

我正在尝试从谷歌获取jwk密钥集,以便与Apache Cxf OIDC和Jose Libs一起使用。当我在一个独立的main方法上运行它时,代码工作得很好。

public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        final WebClient client = WebClient.create("https://www.googleapis.com/oauth2/v3/certs", Arrays.asList(new JsonWebKeysProvider()), true).accept(MediaType.APPLICATION_JSON);
        JsonWebKeys keys = client.get(JsonWebKeys.class);
        keys.getKeys().forEach(key -> {
            System.out.println("****************************************************************************");
            System.out.println("ID........." + key.getKeyId());
            System.out.println("Alg........" + key.getAlgorithm());
            System.out.println("Key Type..." + key.getKeyType());
            System.out.println("Use........" + key.getPublicKeyUse());
        });

    }

}

ID、算法、密钥类型和使用正确打印,这意味着密钥是属性填充的。

样本输出:

****************************************************************************
ID.........79c809dd1186cc228c4baf9358599530ce92b4c8
Alg........RS256
Key Type...RSA
Use........sig
****************************************************************************
ID.........17d55ff4e10991d6b0efd392b91a33e54c0e218b
Alg........RS256
Key Type...RSA
Use........sig

pom公司。Main类的xml提取。

<dependencies>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-client</artifactId>
            <version>3.3.5</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-security-sso-oidc</artifactId>
            <version>3.3.5</version>
        </dependency>
    </dependencies>

但是,在Tomee 8中部署时,相同的代码不起作用。

@WebServlet(name = "NewServlet", urlPatterns = {"/x"})
public class NewServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        PrintWriter writer = response.getWriter();

        final WebClient client = WebClient.create("https://www.googleapis.com/oauth2/v3/certs", Arrays.asList(new JsonWebKeysProvider()), true).accept(MediaType.APPLICATION_JSON);
        JsonWebKeys keys = client.get(JsonWebKeys.class);
        keys.getKeys().forEach(key -> {
            writer.println("****************************************************************************");
            writer.println("ID........." + key.getKeyId());
            writer.println("Alg........" + key.getAlgorithm());
            writer.println("Key Type..." + key.getKeyType());
            writer.println("Use........" + key.getPublicKeyUse());
        });

    }
}

当此代码在Tomee 8中运行时,ID、算法、密钥类型和用途为空。我已经添加了cxf oidc lib和jose jar安装在tomee/lib文件夹中。

样本输出:

****************************************************************************
ID.........null
Alg........null
Key Type...null
Use........null
****************************************************************************
ID.........null
Alg........null
Key Type...null
Use........null

pom.xml servlet 的解压缩。

<dependencies>
    <dependency>
        <groupId>org.apache.tomee</groupId>
        <artifactId>javaee-api</artifactId>
        <version>8.0-3</version>
        <scope>provided</scope>
    </dependency>      
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-frontend-jaxrs</artifactId>
        <version>${cxf.version}</version>
        <scope>provided</scope>
    </dependency> 
    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-security-sso-oidc</artifactId>
        <version>${cxf.version}</version>
        <scope>provided</scope>
    </dependency>

    <dependency>
        <groupId>org.apache.cxf</groupId>
        <artifactId>cxf-rt-rs-client</artifactId>
        <version>${cxf.version}</version>
        <scope>provided</scope>
    </dependency>

</dependencies>

导致此问题的原因是什么?

共有1个答案

慎俊艾
2023-03-14

我意识到,当在tomee中创建Webclient时,它会获取tomee提供的总线属性,这导致无法调用JsonWebKeysProvider。

在我的例子中,下面是在tomee中创建客户机的正确方法。

JAXRSClientFactoryBean sf = new JAXRSClientFactoryBean();
sf.setAddress("https://www.googleapis.com/oauth2/v3/certs");
sf.setProvider(new JsonWebKeysProvider());
sf.setBus(new ExtensionManagerBus());

Calling sf.setBus(新扩展管理器总线());确保提供的值/属性不会被拾取。

 类似资料:
  • 问题内容: 尽管我很确定这是昨天或前一天工作的,例如,在IE10中不再起作用。我已经测试了我的浏览器,但是它不再起作用了。还有谁有相同的问题吗?或者,它永远都行不通吗? 问题答案: IE不支持输入type =“ number”,但您可以使用jQueryUISpinner小部件。它非常易于使用,并且具有许多对开发人员友好的API。

  • 问题内容: 工作如何? 以下代码在这里不起作用: Employee.java 地址.java persistence.xml 这是测试类……请检查城市名称,它没有在ADDRESS表中按降序存储地址值 JPAOrderByAnnotationTest 问题答案: 我认为您误解了注释的实际作用。根据javadoc: 指定在 检索 关联或集合时,将值指定为关联的集合或元素集合的元素的顺序。 [添加重点]

  • 我这里有点麻烦。我试图在我的MVC4项目中使用TinyMCE作为文本编辑器。 到目前为止,这很简单,我只需要能够正确地显示编辑器。 我有两个重要的类。 控制员: 然后是视图,这就是我试图让TinyMCE工作的地方: @{ViewBag.Title=“Index”;} 亲善 这是一些可以用TinyMCE编辑的内容。 出于某种原因,结果是这样的:它看起来如何 知道为什么我没有从TinyMCE获得任何功

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请

  • 问题内容: 这看起来有效,但无法正常工作。我希望菜单悬停时’huh’div不透明。我尝试了淡入/淡出效果,但效果很好,但只有一次很奇怪。 问题答案: 不带点使用:

  • 问题内容: 我正在编辑从tesseract ocr获得的一些电子邮件。 这是我的代码: 但是输出不正确。 输入: 输出: 但是,当我在每次替换后将结果分配给新的String时,它都能正常工作。为什么在同一字符串中连续分配不起作用? 问题答案: 您将在Javadoc中的String.replaceAll()中注意到,第一个参数是正则表达式。 句点()和管道()以及花括号()都有特殊的含义。您需要对它

  • 问题内容: 我正在编写3D绘画,但在Java中发现了问题。在代码的一部分中,它起作用了: 在另一种情况下,它不起作用: 你能告诉我如何使它工作吗?谢谢在我问之前,是的,它确实执行了那部分代码。 编辑: 哦,现在工作正常,谢谢 问题答案: 代替: