2012-09-10 79 views
2

我添加了cronjobs春季應用程序使用石英。春季石英工作 - 訪問彈簧安全安全豆的方法

這些工作裏面,我想從另一個應用程序訪問spring-security secured bean方法。

這是我的應用程序結構。

| - 核心
| - webapp
| - jobs-app

webapp和jobsapp都使用核心服務。 jobsapp不是一個Web應用程序。它只是石英工作。

裏面一個工作,如果我試圖訪問使用SpringSecurity全球方法的安全性我得到一個異常{org.springframework.security.AuthenticationCredentialsNotFoundException}"org.springframework.security.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext"

如果我設置使用SecurityContextHolder.getContext上下文()。setAuthentication到電力用戶獲得了豆, 有用。

但是,我必須爲所有的工作做到這一點。

有沒有一種方法可以讓所有的工作runas特定用戶?可能是某處的某種配置?

回答

1

你有兩個選擇:

  • 移動@Secured註釋了,從服務到網絡層。如果我正確理解你的Quartz作業直接訪問服務bean(繞過Web層),所以你將繞過安全性

  • 實現了Run-As功能,就像你所描述的那樣。它不一定是那個手冊。嘗試模板方法模式或一些AOP +註釋。它會變得相當乾淨。

我們嘗試了這兩種方法,並將安全性移至web層稍微好一些。這是可能的,因爲服務層很好地映射到Spring MVC控制器方法。

+0

是啊我的作業直接訪問服務bean。但是,我不能將它們移動到web層,因爲如果它們在不同的包中,我使用osgi和註釋不工作。 http://stackoverflow.com/questions/12158403將嘗試第二種方法。感謝您的迴應。 –