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这里的一些答案可能会有所帮助: