这是我的情况:
我的应用程序启用了Mongo
Auditing,并使用了自定义的AuditorAware,可从中获取当前用户SecurityContext
。这在同步方法中效果很好,并且当前的审计程序已成功保存,但是我无法使其在@Async
方法中正常工作。
我有一个异步方法(CompletableFuture
),可对Mongo数据库进行一些更新。当AuditorAware.getCurrentAuditor()
被调用时,没有任何身份验证信息存在,我不能让现任核数师(SecurityContextHolder.getContext().getAuthentication()
回报null
)。
@Override
public User getCurrentAuditor() {
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if (authentication == null || !authentication.isAuthenticated()
|| authentication instanceof AnonymousAuthenticationToken) {
log.error("Not authenticated");
return null;
}
[...]
}
我正在使用DelegatingSecurityContextAsyncTaskExecutor
:
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(20);
executor.setMaxPoolSize(100);
executor.setQueueCapacity(200);
executor.initialize();
return new DelegatingSecurityContextAsyncTaskExecutor(executor);
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return new ItacaExceptionHandler();
}
}
如何使它正常工作?
Spring安全上下文始终绑定到Threadlocal。
可能您可能还需要为安全上下文设置MODE_INHERITABLETHREADLOCAL。
@Bean
public MethodInvokingFactoryBean methodInvokingFactoryBean() {
MethodInvokingFactoryBean methodInvokingFactoryBean = new MethodInvokingFactoryBean();
methodInvokingFactoryBean.setTargetClass(SecurityContextHolder.class);
methodInvokingFactoryBean.setTargetMethod("setStrategyName");
methodInvokingFactoryBean.setArguments(new String[]{SecurityContextHolder.MODE_INHERITABLETHREADLOCAL});
return methodInvokingFactoryBean;
}
http://www.ogrigas.eu/spring/2010/04/inherit-spring-security-context-in-
child-threads
我正在处理一个项目,该项目有一个线程池,它向其中提交任务。可以说,每项任务都是一条链条。当任务执行时,它会执行它需要执行的操作,然后检查结果。这些任务中的每一个都包含一个结果映射(只是一个枚举)和其他任务。在同一个线程中调用这些结果,循环重复,直到不再有任务为止,此时它返回到链的上游,将每个结果添加到集合中,并将其返回到主线程。Q 请记住,这也是一个我还没有真正测试过的原型,所以我知道这可能不完美
我试图从登录用户那里获取UUID,将其存储为“CreatedBy”和“LastUpdatedBy”,而不仅仅是字符串。然而,我得到了一个演员错误: 类java。无法将lang.String转换为类com。实例林。容器容器 下面的所有代码。。。谢谢 大编辑: 我更改了应用程序用户以实现来自SpringSecurity的用户详细信息,并向我的基本实体添加了合法的映射关系。现在我得到了一个新的异常。我很
我们在应用程序中使用了Hibernate/JPA、Spring、Spring Data和Spring Security。我有一个标准的实体,它是使用JPA映射的。此外,我还有一个 它遵循Spring数据约定来命名查询方法。我有一个实体 如何避免这种递归?是否有“规范的方式”来加载实体?或者有没有一种方法可以防止Hibernate/JPA冲洗?
问题内容: 我们在应用程序中使用Hibernate / JPA,Spring,Spring Data和Spring Security。我有一个使用JPA映射的标准实体。此外,我有一个 它遵循Spring Data约定来命名查询方法。我有一个实体 我想使用Spring Data审核支持。(如此处所述。)因此,我创建了一个如下: 当我创建一个方法时 一切都正确接线的地方是Spring Data 。然后
我试图在我当前的项目中使用Spring数据JPA(1.6.2)。一切似乎都很好,但我在实现AuditorAware接口时遇到了问题。 我的应用程序将部署到一个旧的Apache Jetspeed JSR168兼容门户。此门户负责用户身份验证/授权。因此,我不必使用像Spring security或Shiro这样的安全框架。我的应用程序中的其他框架包括: Struts 1.2.4(带Struts入口桥
本文向大家介绍基于Spring Data的AuditorAware审计功能的示例代码,包括了基于Spring Data的AuditorAware审计功能的示例代码的使用技巧和注意事项,需要的朋友参考一下 Spring Data提供支持审计功能:即由谁在什么时候创建或修改实体。Spring Data提供了在实体类的属性上增加@CreatedBy,@LastModifiedBy,@CreatedDat