我们有一个奇怪的REST API jaxrs,我们想用密钥斗篷保护它。
问题是,与@SecurityDomain("keycloak")
的集成仅与EJB入口点一起使用。在没有@Stateless
注释的类上将被忽略
问题是入口点成为EJB和EJB池。对于无状态应用程序,这并不是什么好事。而且,EJB中的所有方法都是事务性的,我们不希望这种行为。因此,是的,我们可以添加注释性事务性以指定不使用该方法中的事务,但我认为这是一种解决方法。
我们希望尽最大努力与CDI合作。并同时具有在wildlfy 20 EJB中使用ejb池管理的入口点可能是大型应用程序的瓶颈。
任何主意吗?还是使用CDI实现密钥隐藏安全性的正确方法?
如果您使用@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")) {
....
}
....
}