2

我在我的 java Web 应用程序中使用 Spring Security 和 Hibernate 从数据库中获取数据。我们现在需要根据用户所在的页面和他们拥有的访问级别来限制用户可以检索的结果。IE

对于第一页,管理员可以查看所有内容,管理员可以查看/搜索属性为A且值为X的所有内容,站点管理员只能查看/搜索该页面上属性B为值为Y的所有内容。

目前我们使用了一个写得很糟糕的 HQL 函数,它根据传入的用户和位置拼凑一个字符串查询。它非常大If...Else if....else...if else等。

我试图通过使用 Hibernate FullTextFilter 注释以更加程序化的方式来解决这个问题。但是,我需要通过一个主键的属性来搜索连接表,我认为这不太好。

根据不同的权限从数据库中获取项目的最佳实践/推荐方式是什么?

4

1 回答 1

0

由于您的用户具有角色,因此您可以在服务层(最好)上使用 spring 安全注释来保护这些方法不会在未经许可的情况下被用户调用。在您的视图中,您可以使用 spring security jsp 标签来隐藏他们无法访问的项目。 spring security jsp 标签用于保护 url 和方法 ,所以如果在你的 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);

浏览文档,您应该能够通过使用此库来实现您想要做的事情。

希望能帮助到你。

于 2013-11-07T17:11:20.527 回答