該問題可以通過下面的例子來定義:如何保護關聯資源?
我有一個類MainClass
它與由@OneToOne
關係稱爲AssociatedClass
另一個類相關。兩者都有一個公開的存儲庫,所以我可以在URL /mainClasses/{some_id}
和URL /associatedClasses/{some_id}
上進行GET。然而,AssociatedClassRepository
具有下面的代碼:
@RepositoryRestResource
public interface AssociatedClassRepository extends PagingAndSortingRepository<AssociatedClass, String> {
@Override
@PreAuthorize("1 == 2")
AssociatedClass findOne(String s);
}
所以它永遠不會授權GET方法AssociatedClass
類型的對象。但是,由於MainClass
類型的對象與AssociatedClass
對象關聯,因此可以通過在/mainClasses/{some_id}/associatedClass
處執行GET來獲得此對象。
我想阻止訪問/mainClasses/{some_id}/associatedClass
,但不是所有的用戶。我想用我可以通過@PreCondition
的方式來定義一些條件。因此,只有經過身份驗證的用戶是資源的所有者,我才能允許訪問,這是我的真正目標。
任何想法?
你可以發佈你的控制器代碼嗎?和存儲庫代碼? –
我沒有任何控制器,因爲我正在使用Spring Data Rest。我編輯了這篇文章,以便您可以看到AssociatedClassRepository的完整代碼。 – bergacat1
這看起來像我一樣安全沒有被激活。 Spring Data REST基本上就是調用這個方法。如果這不會觸發安全異常,那麼您的Spring Security安裝程序似乎不正確。你確定你有方法安全性激活? –