Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring安全实体字段级安全_Java_Spring_Security_Spring Mvc_Spring Security - Fatal编程技术网

Java Spring安全实体字段级安全

Java Spring安全实体字段级安全,java,spring,security,spring-mvc,spring-security,Java,Spring,Security,Spring Mvc,Spring Security,我有一个Spring MVC应用程序,它提供了一个视图,其中显示了客户实体中的所有字段,如姓名、地址、电话号码等。该应用程序具有多种角色,如角色用户和角色管理。具有ROLE\u USER的用户只能看到客户名称,而具有ROLE\u ADMIN的用户可以看到所有客户字段 目前,我实现这一点的方式是基于这样一种观点,即根据用户的角色,使用限制对某些字段的访问: <th:block sec:authorize="hasRole('ROLE_ADMIN')"> <div th:tex

我有一个Spring MVC应用程序,它提供了一个视图,其中显示了
客户
实体中的所有字段,如姓名、地址、电话号码等。该应用程序具有多种角色,如
角色用户
角色管理
。具有
ROLE\u USER
的用户只能看到客户名称,而具有
ROLE\u ADMIN
的用户可以看到所有客户字段

目前,我实现这一点的方式是基于这样一种观点,即根据用户的角色,使用限制对某些字段的访问:

<th:block sec:authorize="hasRole('ROLE_ADMIN')">
  <div th:text="${customer.phoneNumber}" />
</th:block>
如果主体未经授权,则在尝试访问该字段时,这可能会引发一个
AccessDeniedException

泽西岛项目似乎有这样的概念,这是一个例子。然而,它似乎仅限于基于角色的安全性,而不是
@PreAuthorize

在Spring安全性中是否有任何方法或实现此类内容,我知道安全上下文或SpEL评估上下文在实体中不可用,因为它们不是Spring管理的。如果没有,有没有其他方法可以让我实现同样的目标

编辑:


我不知道Spring安全框架到底是什么,但似乎可以在ApectJ模式下使用Spring AOP来检测域(实体)类的方法。然后,就可以获得
AccessDecisionManager
并传递身份验证(可能从
SecurityContextHolder
获得)以及域类方法(如果存在)上的注释内容。有人有做这种事情的经验吗?

我在AspectJ模式下使用SpringAOP解决了这个问题。如果启用AspectJ模式并执行编译时或加载时编织,则各种Spring注释(如
@Transactional
@PreAuthorize
)将适用于任何非Spring托管类,这里有一个非常好的示例:

您需要确保您的项目中有
spring安全特性
依赖项(如果您使用编译时编织,则可以使用插件),以启用
@Secured
注释的编织。尽管
AnnotationSecurityAspect
中的注释将类描述为:

具体的AspectJ方面,使用Spring Security@Secured注释 JDK1.5+


该类实际上编织了其他Spring注释,包括
@PreAuthorize
@PreFilter
@posauthorize
@PostFilter

数据库代理身份验证(模拟)如何组合w列级安全性?@NeilMcGuigan我真的在寻找解决这个问题的应用程序级解决方案,您提到的是特定于数据库的,对于在单个用户下维护到数据库的连接池的web应用程序不起作用pooling@NeilMcGuigan我并不是真的在寻找一个数据库级的解决方案,因为它是一个可移植的Spring Boot应用程序,设计用于MySQL和PostgreSQL,无需数据库管理。我没有真正接触到你提到的概念,你能解释一下它们是如何工作的吗?我目前正在更详细地研究AspectJ,因为我认为它可以提供解决方案。
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String getPhoneNumber()
{
  return phoneNumber;
}