我们正在使用 Oracle 数据库构建 Java EE / JPA / CDI 应用程序。数据模型(我们无法更改)通过使用视图和 client_info 部分实现安全性......类似于......
create view the_view
as select *
from the_table
where organization_id = USERENV('CLIENT_INFO')
其中 userenv('CLIENT_INFO') 基本上是通过调用设置的
dbms_application_info.set_client_info(11);
现在,我们有一系列无状态 Bean,它们基本上注入 Persistence Context 并执行查询(本地查询和常规 POJO),我们需要一种方法将客户端信息(我们可以从安全上下文中获取)注入 PersistenceContext,然后再进行调用 EntityManager
简而言之,我需要能够调用它..
@PersistenceContext
EntityManager em;
@Inject
UserInfo userInfo;
public TheView getTableData(long id) {
// At this point security Information should be set..
// Call the query
return em.find(TheView.class, id);
}
无需手动调用 setClientInfo() ..
这样做的一种方法可能是使用拦截器并注释该方法并在那里进行调用(假设我可以掌握该方法将使用的 PersistenceContext ..).. 这甚至可以工作吗?
还有其他方法吗?
蒂亚!