【问题标题】:Why @PostFilter don't work sometimes in Spring Security service?为什么 @PostFilter 有时在 Spring Security 服务中不起作用?
【发布时间】:2016-04-25 15:01:00
【问题描述】:

我在我的项目中使用了 Spring Security。我有如下服务:

public interface A {

   @PostFilter("hasPermission(filterObject, 'read')")
   List<MyEntity> method1();

   @PostFilter("hasPermission(filterObject, 'read')")
   List<MyEntity> method2();
}

在实现method1()我使用method2(),但是PostFiltermethod2()在这种状态下不起作用。

为什么

【问题讨论】:

    标签: spring-mvc spring-security spring-security-acl


    【解决方案1】:

    你的观察是正确的。

    为了处理安全注解,Spring 使用了代理。代理是一个动态生成的类,位于调用者和实际实现之间。因此,当您使用接口 A 时,您实际上并没有直接调用您的实现,而是一个安全层。

    Spring 默认使用接口代理;代理实现有问题的接口。这意味着仅当您使用 A 作为接口 时才会调用安全性。从实现类本身调用方法时不会强制执行安全性,因为实现不知道代理。

    通过使用类代理,当从类本身调用方法时,安全注释可以工作,因为代理扩展实现。但是,仍然只有公共方法上的注释有效。

    有关代理的更深入解释,请参阅 Spring 框架手册中的Proxying mechanisms

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2021-09-10
      • 2016-12-15
      相关资源
      最近更新 更多