如何在Keycloak身份validation之前调用javax.servlet.Filter

我们使用resteasy开发了一个REST API。 (部署在wildfly 10中)

基本上这些REST API是从另一个应用程序内部调用的,端点是用keycloak保护的。

但是一个端点暴露给外部方(该端点也使用keycloak保护)。

但由于外部方无法提供Keycloak Autherization代码,我们已经完成了一个实现,其中客户端使用应用程序生成的auth_key进行注册,客户端将使用该auth_key调用端点。

然后在webfilter(javax.servlet.Filter)中,使用tha auth_key我们获得相关的keycloak authntication Bearer令牌。 如果需要(例如:令牌已过期),我们也会调用Keycloak Server。 收到后,我们将Autherization令牌添加到Webfilter中的httpRequest并继续到终点应用程序。

但问题是, 在Web Filter之前调用KeyCloak身份validation 。 我正在寻找的是“如何在密钥泄露认证之前调用Webfilter?”

编辑:

现在我正试图找到这里提到的方法。 在Keycloak中进行身份validation之前将请求标头设置为请求 。 我可以在身份validation发生之前接听电话。 但是我无法在那里设置请求标头。

web.xml中

 Restful Web Application  resteasy.scan true    keycloak.config.resolver package.to.HeaderBasedKeycloakConfigResolver    REST endpoints /ep-name/resource-name   resource-name       KEYCLOAK realm-name   role-name-for-resource-1 role-name-for-resource-2       org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap   resteasy-servlet  org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher   resteasy.servlet.mapping.prefix /ep-name    resteasy-servlet /ep-name/*   WebFilter package.to.filter.WebFilter   WebFilter /desired-ep-name/*   

在此处输入图像描述

您是否尝试更改web.xml中元素的顺序(例如, servlet定义之前放置filter定义)?

不确定它是否有效,但文档说:“ 链中filter的顺序与filter映射在Web应用程序部署描述符中出现的顺序相同

对于servlet和filter之间的顺序,原则也可能是正确的……

可能是因为Tomcat认证阀在filter之前启动。 检查Authenticators.properties文件。 您可能需要将filter类包装为Valve