当前位置: 首页 > 面试题库 >

Java和Hibernate实现数据“安全性”

习阳
2023-03-14
问题内容

我当前正在使用的系统需要一些基于角色的安全性,在Java EE堆栈中可以很好地满足这一需求。该系统旨在成为业务领域专家在其之上编写代码的框架。

但是,也需要数据security。即,最终用户可以看到哪些信息。

这实际上意味着减少对数据库中行(甚至列)的可见性。

我们使用Hibernate来保持持久性。但是,我们使用自己的注释,以免将持久性选择暴露给业务领域专家。

对于基于行的安全性,这意味着我们可以@Secured在实体级别添加注释,这将导致在基础表中添加额外的列以约束我们的选择?

对于基于列的安全性,我们可能必须@Secured协助查询生成,或者可能使用方面来过滤返回的信息?

我很好奇这可能也会影响hibernate的缓存机制吗?

我敢肯定,很多其他人也会遇到同样的问题,我想知道您是如何解决这个问题的?

非常感激…


问题答案:

Hibernate具有可能适合您的过滤器机制。过滤器将重写hibernate生成的查询,以包括一个附加子句来限制返回的行。我不知道在hibernate中要遮罩/隐藏列的任何内容。

您的数据库可能也支持此功能。例如,Oracle具有虚拟专用数据库(VPD),它将在数据库级别重写您的查询。该解决方案的另一个好处是,违反数据库的任何外部程序(例如,报告工具)都将强制执行安全限制。VPD还支持使用NULL屏蔽受限制的列。

不幸的是,上述解决方案不足以满足我通常从事的项目类型的安全要求。在以上解决方案中,通常存在某种上下文无法轻松表达的情况。例如,用户可以查看自己创建的数据或已标记为公开的数据,或者属于他们管理的项目的数据。

通常,我们创建查询/查找器/ DAO对象,在其中传递增强安全性所需的值,然后相应地创建查询。

我希望这有帮助



 类似资料:
  • 我正在实现一个基于java的指数量表,它将有一个初始值(比如1.0),并在时间上呈指数衰减到0。另一个功能将不时增加仪表值。现在我需要一些帮助来开发线程安全的。 我正在考虑使用java计时器或执行器来创建衰减功能,该功能将每隔5毫秒降低仪表的值。同时,另一个函数在被调用时会增加值。 现在我假设它会有并发问题,所以需要帮助来正确实现它。 我的问题是: > 如何设计一个类,该类将执行函数以每5毫秒减少

  • 问题内容: 我已经在我的应用程序中以相同的方式使用了本教程:http : //www.benmccann.com/hibernate-with-jpa-annotations- and-guice/ 我的应用程序是JAX-RS Web服务,它将接收许多并发请求并进行数据库更新。 GenericDAOImpl.java实现: } 如果2个并发线程尝试保存实体,我得到 如果我评论交易,保存效果很好。

  • 我创建了一个应用程序,它使用Firebase实时数据库。我对安全规则有一个很大的问题。我的用户不需要登录使用应用程序,他们可以发送数据到数据库,无需任何身份验证。例如:这是一个简单的游戏,他们可以互相玩,然后他们可以保存分数。我想创建一个安全的数据库,但是任何人都可以写

  • 本文向大家介绍如何实现Java线程安全问题,包括了如何实现Java线程安全问题的使用技巧和注意事项,需要的朋友参考一下 这篇文章主要介绍了如何实现Java线程安全问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 解决线程安全问题的第一种方案:使用同步代码块 格式:   synchronized(锁对象) {     可能会出现线程安全问题的代码

  • 问题内容: 我正在编写一个Servlet,该Servlet通过访问和修改数据库中的某些表来处理每个请求。我希望与数据库的连接是线程安全的。我不想为此使用已经存在的库/框架(spring,hibernate等)。 我知道我可以通过以下方式为此使用java的ThreadLocal: 每次调用时,新连接都会添加到对象中,然后在释放连接时将其删除。 这是这样做的正确方法,还是它本身应该扩展类?还是有一种更

  • 问题内容: 我正在使用以下代码初始化数据库连接: 而且我知道这样做是不好的做法,而且我还违反了代码,并遇到了如下安全问题: 在没有此安全漏洞的情况下初始化数据库连接的最佳方法是什么? 问题答案: 绝大多数Web应用程序都使用硬编码的用户名/密码进行SQL连接。通常不赞成将生产凭证检查到源代码控制中,或者赋予实习生删除生产数据库的能力。生产凭证应受到保护,只有特权员工才能访问它们。 Web应用程序通