0

我们有一个 widlfy REST API jaxrs,我们想用 keycloak 保护它。

问题是集成@SecurityDomain("keycloak")仅适用于 EJB 入口点。它在没有@Stateless注释的类上被忽略

问题是入口点变成了 EJB,而 EJB poolManaged 对于无状态应用程序来说并不是一件好事。此外,EJB 中的所有方法都是事务性的,我们不希望这种行为。所以是的,我们可以添加一个事务性注释来指定在方法中不使用事务,但我认为这是一种解决方法。

我们希望尽我们所能与 CDI 合作。同时在wildlfy 20 EJB中具有ejb池管理的入口点可能成为大型应用程序的瓶颈。

任何想法 ?或使用 CDI 实现 keycloak 安全性的正确方法?

4

1 回答 1

0

如果您的意思是使用 @RolesAllowed 注释的声明性安全性,则并非所有 CDI bean 都支持,仅 EJB 和 Servlet 支持。

由于 JAX-RS 将在 web 应用程序上运行,因此您可以使用基于 url-patterns 的声明式安全性和使用 web.xml 中的 security-constraints 的 HTTP 方法

您还可以使用 SecurityContext 在 JAX-RS 方法(或过滤器)中实现编程安全性。

@Context
SecurityContext securityContext;

@GET
public Response get() {
    if (securityContext.isUserInRole("ROLE")) {
        ....
    }
    ....
}

尽管不是标准功能,Wildfly JAX-RS 实现 RestEasy 可以配置为支持 @RolesAllowed 注释。请参阅: https ://docs.jboss.org/resteasy/docs/4.4.2.Final/userguide/html/Securing_JAX-RS_and_RESTeasy.html

于 2020-02-17T12:31:49.750 回答