簡體   English   中英

在Spring Security中使用PreAuthorize注釋中的permitAll()的目的

[英]Purpose of using permitAll() in PreAuthorize annotation in Spring Security

作為Spring安全框架的新手,我想知道為什么我們使用@PreAuthorize("permitAll()")和方法? 文檔說permitAll總是評估為true。 http://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html

另外,我有以下代碼更改。 開發人員從permitAll()更改為特定權限檢查。這里的含義是什么? 由於我不太確定permitAll()如何工作,我無法判斷代碼更改背后的邏輯。 在我看來,開發人員添加了特定的權限檢查,並將null作為身份驗證對象傳遞。 有人可以解釋顯式傳遞null作為身份驗證對象的影響嗎? 未經身份驗證的用戶是否具有訪問權限,如果他們對目標對象具有此特定的“LUONTI”權限 - 'opetussuunnitelma'?

-    @PreAuthorize("permitAll()")
+    @PreAuthorize("hasPermission(null, 'opetussuunnitelma', 'LUONTI')")
     OpetussuunnitelmaDto addOpetussuunnitelma(OpetussuunnitelmaDto opetussuunnitelmaDto);

謝謝。 任何幫助非常感謝!

permitAll()完全按照它說的做。 它允許(允許)任何用戶(所有)會話被授權執行該方法。

spring管理其身份驗證和授權的方式意味着訪問您站點的任何人都會收到會話。 此會話可以是匿名的,也可以是經過身份驗證的(用戶提供了某種憑據,系統已接受它)。 permitAll替代permitAll (例如hasPermission() )通常會檢查用戶的身份驗證,以確保在允許調用帶注釋的類/方法之前,他們已經為其分配了一些角色或組。

如果使用permitAll() ,則意味着明確允許任何匿名或經過身份驗證的會話訪問帶注釋的方法。

其他開發人員所做的代碼更改已將給定方法限制為自定義。 看看這個Spring - 基於表達式的訪問控制

我覺得沒有人真正給你你真正想要的東西,這是“permitAll()”的用例。

當您使用特定權限限制整個班級或應用程序時,可以使用它,例如: @PreAuthorize("hasAuthority('USER')")

在這里,只有標識為您定義為用戶的客戶端才能訪問您的類的方法。

但是在控制器中的某個時刻,您希望某個方法是無權限的,因此您將@PreAuthorize("permitAll()")到您的方法中,以便它覆蓋全局權限。

人們會這樣做,因為首先使用最高權限鎖保護所有內容然后在網絡中挖洞(例如,應用程序/類被鎖定為ADMIN但大多數方法被授權給USER)比使用其他方式更安全。 因為如果默認情況下一切都已解鎖,那么當您忘記鎖定控制器時,您可能會遇到安全問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM