Java定时任务中间表,定时任务更新实体报shiro错误

[ERROR] 16:00:20.293 org.quartz.core.JobRunShell.run(JobRunShell.java:211) - Job DEFAULT.com.panport.raiis.fids.util.MonitorDeviceScheduler threw an unhandled Exception:

org.nutz.dao.DaoException: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.

at org.nutz.dao.impl.sql.run.NutDaoRunner._runWithoutTransaction(NutDaoRunner.java:139)

at org.nutz.dao.impl.sql.run.NutDaoRunner._run(NutDaoRunner.java:92)

at org.nutz.dao.impl.sql.run.NutDaoRunner.run(NutDaoRunner.java:81)

at org.nutz.dao.impl.DaoSupport.run(DaoSupport.java:245)

at org.nutz.dao.impl.DaoSupport._exec(DaoSupport.java:257)

at org.nutz.dao.impl.EntityOperator.exec(EntityOperator.java:55)

at org.nutz.dao.impl.NutDao.update(NutDao.java:224)

at com.panport.raiis.fids.service.impl.DeviceIrregularServiceImpl.checkDevices(DeviceIrregularServiceImpl.java:70)

at com.panport.raiis.fids.util.MonitorDeviceScheduler.execute(MonitorDeviceScheduler.java:44)

at org.quartz.core.JobRunShell.run(JobRunShell.java:202)

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

Caused by: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.

at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)

at org.apache.shiro.subject.Subject$Builder.(Subject.java:627)

at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)

at com.panport.raiis.nutz.util.UpdateDaoInterceptor.filter(UpdateDaoInterceptor.java:56)

at org.nutz.dao.DaoInterceptorChain.doChain(DaoInterceptorChain.java:64)

at org.nutz.dao.DaoInterceptorChain.invoke(DaoInterceptorChain.java:139)

at org.nutz.dao.impl.sql.run.NutDaoRunner.runCallback(NutDaoRunner.java:158)

at org.nutz.dao.impl.sql.run.NutDaoRunner._runWithoutTransaction(NutDaoRunner.java:125)

... 10 more

[ERROR] 16:00:20.297 org.quartz.core.ErrorLogger.schedulerError(QuartzScheduler.java:2425) - Job (DEFAULT.com.panport.raiis.fids.util.MonitorDeviceScheduler threw an exception.

org.quartz.SchedulerException: Job threw an unhandled exception. [See nested exception: org.nutz.dao.DaoException: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.]

at org.quartz.core.JobRunShell.run(JobRunShell.java:213)

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:573)

Caused by: org.nutz.dao.DaoException: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.

at org.nutz.dao.impl.sql.run.NutDaoRunner._runWithoutTransaction(NutDaoRunner.java:139)

at org.nutz.dao.impl.sql.run.NutDaoRunner._run(NutDaoRunner.java:92)

at org.nutz.dao.impl.sql.run.NutDaoRunner.run(NutDaoRunner.java:81)

at org.nutz.dao.impl.DaoSupport.run(DaoSupport.java:245)

at org.nutz.dao.impl.DaoSupport._exec(DaoSupport.java:257)

at org.nutz.dao.impl.EntityOperator.exec(EntityOperator.java:55)

at org.nutz.dao.impl.NutDao.update(NutDao.java:224)

at com.panport.raiis.fids.service.impl.DeviceIrregularServiceImpl.checkDevices(DeviceIrregularServiceImpl.java:70)

at com.panport.raiis.fids.util.MonitorDeviceScheduler.execute(MonitorDeviceScheduler.java:44)

at org.quartz.core.JobRunShell.run(JobRunShell.java:202)

... 1 more

Caused by: org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code, either bound to the org.apache.shiro.util.ThreadContext or as a vm static singleton. This is an invalid application configuration.

at org.apache.shiro.SecurityUtils.getSecurityManager(SecurityUtils.java:123)

at org.apache.shiro.subject.Subject$Builder.(Subject.java:627)

at org.apache.shiro.SecurityUtils.getSubject(SecurityUtils.java:56)

at com.panport.raiis.nutz.util.UpdateDaoInterceptor.filter(UpdateDaoInterceptor.java:56)

at org.nutz.dao.DaoInterceptorChain.doChain(DaoInterceptorChain.java:64)

at org.nutz.dao.DaoInterceptorChain.invoke(DaoInterceptorChain.java:139)

at org.nutz.dao.impl.sql.run.NutDaoRunner.runCallback(NutDaoRunner.java:158)

at org.nutz.dao.impl.sql.run.NutDaoRunner._runWithoutTransaction(NutDaoRunner.java:125)

... 10 more

[DEBUG] 16:00:47.213 org.quartz.core.QuartzSchedulerThread.run(QuartzSchedulerThread.java:276) - batch acquisition of 0 triggers

出错的代码是

dao().update(device);

定时任务代码

@IocBean

public class MonitorDeviceScheduler implements Job {

@Inject protected DeviceIrregularService deviceIrregularService;

Logger log = new Logger(this.getClass());

public static Map dateMap = new HashMap<>();

@Inject protected Dao dao;

@Override

public void execute(JobExecutionContext context) throws JobExecutionException {

log.error("=================定时任务开始:"+System.currentTimeMillis()+"====================");

deviceIrregularService.checkDevices();

log.error("=================定时任务结束:"+System.currentTimeMillis()+"====================");

}

您可以通过配置 Shiro 的过滤器链来实现让 Shiro 放行整个 Spring Task 定时任务类。在 Shiro 的配置文件中,配置一个自定义的过滤器链,将所有与 Spring Task 相关的 URL 都配置为不需要经过 Shiro 进行认证和授权的路径。 首先,定义一个自定义的过滤器链,例如 `TaskFilterChainDefinition`,继承自 `DefaultFilterChainManager`。然后,在该类中重写 `createDefaultFilterChainManager` 方法,配置过滤器链。示例代码如下: ```java public class TaskFilterChainDefinition extends DefaultFilterChainManager { @Override protected void createDefaultFilterChainManager() { // 添加不需要经过 Shiro 过滤器的路径,这里假设定时任务类路径为 /task/** addFilterChain("/task/**", "anon"); // 添加其他需要经过 Shiro 过滤器的路径 // ... super.createDefaultFilterChainManager(); } } ``` 接下来,在 Shiro 的配置文件中,使用自定义的过滤器链。示例代码如下: ```java @Configuration public class ShiroConfig { // ... @Bean public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultWebSecurityManager securityManager) { ShiroFilterFactoryBean factoryBean = new ShiroFilterFactoryBean(); factoryBean.setSecurityManager(securityManager); // 设置自定义的过滤器链 factoryBean.setFilterChainDefinitionMap(new TaskFilterChainDefinition().getFilterChainMap()); return factoryBean; } // ... } ``` 通过以上配置,Shiro 将会放行整个 Spring Task 定时任务类,即 `/task/**` 路径下的所有请求。请根据您的实际路径进行相应的调整和配置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值