Java 如何在spring security中解释hasPermission?

Java 如何在spring security中解释hasPermission?,java,spring,security,spring-security,spring-security-acl,Java,Spring,Security,Spring Security,Spring Security Acl,我是春天安全的新手。我如何解释这一点 @PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI')") OpetussuunnitelmaDto addOpetussuunnitelma(OpetussuunnitelmaDto opetussuunnitelmaDto); 将调用权限计算器中的哪个方法?我想在这种情况下会调用有三个参数的。它正在检查当前用户是否对类型为“opetussunnitelma”的目标具

我是春天安全的新手。我如何解释这一点

 @PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI')")
     OpetussuunnitelmaDto addOpetussuunnitelma(OpetussuunnitelmaDto opetussuunnitelmaDto);
将调用权限计算器中的哪个方法?我想在这种情况下会调用有三个参数的。它正在检查当前用户是否对类型为“opetussunnitelma”的目标具有“LUONTI”权限。我说得对吗?我们不能不包含“null”并且只传递两个参数吗。我了解到没有提供第一个参数(身份验证对象)

+public class PermissionEvaluator implements org.springframework.security.access.PermissionEvaluator {
+
+    @Override
+    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
+        LOG.error(" *** ei toteutettu *** ");
+        return true;
+    }
+
+    @Override
+    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
+        LOG.error(" *** ei toteutettu *** ");
+        return true;
+    }
+
+    private static final Logger LOG = LoggerFactory.getLogger(PermissionEvaluator.class);
+}
将调用权限计算器中的哪个方法

我会接到电话的

我读到第一个参数(身份验证对象)不是 供应

+public class PermissionEvaluator implements org.springframework.security.access.PermissionEvaluator {
+
+    @Override
+    public boolean hasPermission(Authentication authentication, Object targetDomainObject, Object permission) {
+        LOG.error(" *** ei toteutettu *** ");
+        return true;
+    }
+
+    @Override
+    public boolean hasPermission(Authentication authentication, Serializable targetId, String targetType, Object permission) {
+        LOG.error(" *** ei toteutettu *** ");
+        return true;
+    }
+
+    private static final Logger LOG = LoggerFactory.getLogger(PermissionEvaluator.class);
+}
它不是在注释中显式提供的,而是由Spring隐式提供的。你的注释应该是

@PreAuthorize("hasPermission(#opetussuunnitelmaDto, 'LUONTI')")
理想情况下,我会在执行授权之前检查它们是否经过身份验证

@PreAuthorize("isAuthenticated() and hasPermission(#opetussuunnitelmaDto, 'LUONTI')")
更新您的评论

基本上,您可以通过以下任一方式调用PermissionEvaluator:

hasPermission('#targetDomainObject', 'permission')    // method1
hasPermission('targetId', 'targetType', 'permission') // method2
验证将始终由Spring提供。在您的情况下,您可以通过以下方式调用hasPermission

hasPermission(空,'opetussuunnitelma','LUONTI'))

哪个将匹配方法2,但传入空id没有意义,您将针对哪个实体进行权限检查?根据您正在应用@PreAuthorize的方法

Opetussuunnitelmaddo添加Opetussuunnitelma(Opetussuunnitelmaddo 奥佩图苏努尼特马多)


调用method1可能更有意义,因为您似乎有类似于目标域对象的东西。

谢谢。请告诉我是否使用“null”“在这里有什么用途吗?当我向控制器中的一个方法添加@PreAuthorize注释时,它的工作方式很有魅力。”。但是,不适用于服务方法。有什么具体原因吗?@Arun这里的一些答案可能会有所帮助: