2014-01-12 22 views
3

我有一個彈簧安全設置的春天應用程序。我已經使用@PreAuthorize(...)註釋了我的服務方法。因此,網絡上的每個人都需要一些特定的權限來訪問這些方法,這很好。Spring安全@PreAuthorize與應用程序本身作爲用戶

但是現在我有了一個新的用例。有一個@Scheduled方法運行來執行一些檢查和發送消息。目前只有擁有ROLE_USER的人才可以發送消息。但是現在應用程序本身也必須發送這些消息。

我應該如何管理有某種無形的用戶(=應用程序),它被記錄在所有的時間和有特定的權利?或者,「所有權利」也會很好,所以它只是忽略所有這些安全註釋。 或者我可能根本不需要「用戶」?

感謝您的幫助!

編輯:主要的2個問題是:

  1. 我應該爲應用程序創建一個真實的用戶?意思是:數據庫的用戶表中的條目?你是如何解決這個問題的?也許你只是使用管理員用戶(這是一個真人)的用戶帳戶?

  2. 如果我現在有這個「系統」的用戶。什麼是「使用」它的最佳方式?例如,我會使用@Autowired User systemUser來訪問這個用戶,無論我需要它。 (當然,在我用這個特定用戶創建一個bean的應用程序配置中有一些要點)。

EDIT2:一些更多的想法:

我想將來我想從應用程序的不同子系統發送消息。因此,使用管理員用戶是沒有選擇的,因爲我需要一些具有不同名稱的不同用戶。

回答

0

我認爲所有您所提供的答案是相當普遍的解決方案,所以它在很大程度上取決於你的需求。我正在處理的應用程序有一些激烈的審計需求,所以我們有一個用戶爲應用程序本身設置,以便在需要通過調度程序調用服務時使用它。這使我們能夠記錄一個給定的原則。也許你應該澄清你的要求?

+0

這是隻是簡單有新條目,系統將爲該用戶X生成消息,並且該消息包含一些文本和指向這些新條目的鏈接。沒什麼特別的。 ......我只需要回答兩個問題(我會在一分鐘後將這些問題追加到問題中) –

+0

我工作的企業使用ldap訪問的中央目錄。我們有一個系統用戶進入這個系統。我們從每個環境中的系統管理員提供給系統的屬性文件中選取憑證。屬性文件用於在需要時查找證書。我們不會緩存委託人,因爲在我們的案例中,每次調用之前都必須進行身份驗證。 –

+0

將憑證硬編碼到您的應用中並不是一個好主意,在這裏他們可以被逆向設計。此外,憑證在每個環境中往往不同 - 開發,集成,qa,預產品和產品。 –

3

我面臨着類似的問題,我實現的解決方案是一個內部和「外部」服務實現。外部一個具有內部一個在自動裝配。任何應用程序的內部組件,喜歡你的計劃作業,必須在內部服務有線,任何網站曝光部件將有安全「外部」服務連線中,其中將有@PreAuthorize等註釋,但否則將作爲內部服務的代表。

我還登錄,消息傳遞到內部服務,這是用於授權的認證對象的主前。你知道在SecurityContext中會有一個可用的,所以選擇它並在外部調用內部服務的某個人的日誌中記錄下來。我做了以下(你的本金可以是非用戶名,不過,想分享):調度檢查是否有表A的一些新條目,用戶X.如果:

final String currentUser = SecurityContextHolder.getContext().getAuthentication().getPrincipal().toString(); 
相關問題