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

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


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


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


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


然后在一个 web 过滤器(一个 javax.servlet.Filter)中,使用 tha auth_key 我们得到相关的 keycloak authntication Bearer 令牌。如果需要(例如:令牌过期),我们也调用 Keycloak 服务器。收到后,我们将该授权令牌添加到 Web 过滤器内的 httpRequest 并继续执行端点应用程序。


但问题是,KeyCloak 身份验证在 Web Filter 之前调用。我正在寻找的是“如何在 keycloak 身份验证之前调用 Web 过滤器?”

http://img2.mukewang.com/60b6e46f0001c4de11030937.jpg

至尊宝的传说
浏览 257回答 3
3回答

牛魔王的故事

您是否尝试过更改 web.xml 中元素的顺序(例如,将过滤器定义放在servlet 定义之前)?不确定它会起作用,但文档说:“链中过滤器的顺序与过滤器映射出现在 Web 应用程序部署描述符中的顺序相同”对于 servlet 和过滤器之间的顺序,这个原则也可能适用......

繁星点点滴滴

我知道这是 2 岁,但我找到了解决这个问题的解决方案:将您的适配器更改为 servlet 过滤器,我的是 jboss/wildfly,然后添加到过滤器下方的 web.xml 以更改请求或响应。在 jboss/wildfly 的情况下,身份验证发生在阀门中,因此身份验证发生在任何过滤器执行之前。完成此操作后,您可以控制 keycloak 何时开始工作并将过滤器放在它之前。web.xml<filter>&nbsp; &nbsp; &nbsp; &nbsp; <filter-name>Keycloak Filter</filter-name>&nbsp; &nbsp; &nbsp; &nbsp; <filter-class>org.keycloak.adapters.servlet.KeycloakOIDCFilter</filter-class></filter>&nbsp; &nbsp; <filter-mapping>&nbsp; &nbsp; &nbsp; &nbsp; <filter-name>Keycloak Filter</filter-name>&nbsp; &nbsp; &nbsp; &nbsp; <url-pattern>/restricted/*</url-pattern>&nbsp; &nbsp; &nbsp; &nbsp; <url-pattern>/restricted/</url-pattern></filter-mapping>将适当的版本添加keycloak-servlet-filter-adapter到您的 pom,并从 web.xml 中删除所有其他安全约束、身份验证方法等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java