我在带有Hibernate的java Web应用程序中使用Spring Security从数据库中获取数据。我们现在需要限制用户可以根据他们所在的页面以及他们拥有的访问级别来检索哪些结果。即。
对于第一页,管理员可以看到所有内容,管理员可以查看/搜索属性 A 的所有内容,其中值为 X ,网站管理员只能查看/使用 B 属性搜索该页面上的所有内容,其值为 Y 。
目前我们使用写得不好的HQL函数,它根据传入的用户和位置将字符串查询拼凑在一起。这是一个非常大的If...Else if....else...if else
等。
我试图通过使用Hibernate FullTextFilter注释以更加编程的方式来解决这个问题。但是,我需要通过其中一个主键的属性搜索连接表,我认为这不会很好。
根据权限变化很大,从数据库中获取项目的最佳做法/推荐方法是什么?
答案 0 :(得分:0)
由于您的用户具有角色,因此您可以在服务层(最好)上使用Spring安全注释来保护这些方法不被未经许可从用户调用。在您的视图中,您可以使用spring security jsp标记来隐藏他们无法访问的项目。 spring security jsp tag, to secure urls and methods 因此,如果你的jsp页面中你想要隐藏某些内容(只有角色主管的用户可以看到),它将会像这样(取决于你的需要)
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
<sec:authorize access="hasRole('supervisor')">
This content will only be visible to users who have
the "supervisor" authority in their list of <tt>GrantedAuthority</tt>s.
</sec:authorize>
以及您可以定义哪种类型的用户可以调用这样的方法:
@PreAuthorize("hasRole('ROLE_USER')")
public void create(Contact contact);
通过使用此库,您应该能够实现您想要实现的目标。
希望它有所帮助。