Spring security SpringQuartz作业-访问SpringSecurity安全bean方法

Spring security SpringQuartz作业-访问SpringSecurity安全bean方法,spring-security,quartz-scheduler,Spring Security,Quartz Scheduler,我使用quartz将cronjobs添加到spring应用程序中 在这些作业中,我想从另一个应用程序访问受spring安全保护的bean方法 这是我的应用程序结构 |-核心 |-webapp |-乔布斯应用程序 webapp和jobsapp都使用核心服务。jobsapp不是一个web应用程序。它只是有石英的工作 在作业中,如果我尝试访问使用SpringSecurity全局方法安全性保护的bean,我会得到一个异常{org.springframework.security.Authenticati

我使用quartz将cronjobs添加到spring应用程序中

在这些作业中,我想从另一个应用程序访问受spring安全保护的bean方法

这是我的应用程序结构

|-核心
|-webapp
|-乔布斯应用程序

webapp和jobsapp都使用核心服务。jobsapp不是一个web应用程序。它只是有石英的工作

在作业中,如果我尝试访问使用SpringSecurity全局方法安全性保护的bean,我会得到一个异常
{org.springframework.security.AuthenticationCredentialsNotFoundException}“org.springframework.security.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份验证对象”

如果我使用SecurityContextHolder.getContext().setAuthentication将上下文设置为超级用户,则它可以工作

但是,所有的工作我都必须这样做

有没有办法让所有作业都以特定用户的身份运行?可能在什么地方有一些配置

您有两个选择:

  • @Secured
    注释从服务层向上移动到web层。如果我理解正确,您的Quartz作业将直接访问服务bean(绕过web层),因此您也将绕过安全性

  • 实现运行方式功能,如您所述。它不一定是那个手册。尝试模板方法模式或一些AOP+注释。结果会很干净的


我们尝试了这两种方法,将安全性转移到web层的效果稍微好一点。这是可能的,因为服务层很好地映射到Spring MVC控制器方法。

是的,我的作业直接访问服务bean。但是,我不能将它们移动到web层,因为我使用osgi,如果它们在不同的包中,则注释不起作用。我将尝试第二种方法。谢谢你的回复。