与REST API JAXRS中的CDI进行Keycloak集成

问题描述 投票:0回答:1

我们有一个奇怪的REST API jaxrs,我们想用密钥斗篷保护它。

问题是,与@SecurityDomain("keycloak")的集成仅与EJB入口点一起使用。在没有@Stateless注释的类上将被忽略

问题是入口点成为EJB和EJB池。对于无状态应用程序,这并不是什么好事。而且,EJB中的所有方法都是事务性的,我们不希望这种行为。因此,是的,我们可以添加注释性事务性以指定不使用该方法中的事务,但我认为这是一种解决方法。

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

任何主意吗?还是使用CDI实现密钥隐藏安全性的正确方法?

rest cdi keycloak wildfly-11 ejb-3.2
1个回答
0
投票

如果您使用@RolesAllowed注释表示声明性安全性,则并非所有CDI bean都支持此安全性,只有EJB和Servlet支持。

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

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

@Context
SecurityContext securityContext;

@GET
public Response get() {
    if (securityContext.isUserInRole("ROLE")) {
        ....
    }
    ....
}
© www.soinside.com 2019 - 2024. All rights reserved.