2012-09-10 60 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将尝试第二种方法。感谢您的回应。 –