hibernate 版本是3.6,springSecurity版本是3.0.5,spring版本是3.0.6,问题是
做了一个hibernate的listener,implements了SaveOrUpdateEventListener ,这个类会监控所有调用saveorupdate方法,然后在之前插入我的业务逻辑,如设置创建用户,公司等通用信息。平时也运行正常,但是偶尔会遇到没有插入用户,公司信息的情况,大概10w分之一的概率吧,代码如下:
@SuppressWarnings("serial")
public class AuditListener implements SaveOrUpdateEventListener {
private static Logger logger = LoggerFactory.getLogger(AuditListener.class);
public void onSaveOrUpdate(SaveOrUpdateEvent event) throws HibernateException {
Object object = event.getObject();
if (object instanceof AuditableEntity
&& SpringSecurityUtils.getCurrentCustomUser() != null) {
AuditableEntity entity = (AuditableEntity) object;
String loginName = SpringSecurityUtils.getCurrentUserName();
// Long id = getEntityId(entity);
Long id = entity.getMainid();
if (id == null) {
// 创建新对象
entity.setRecAddTime(new Date());
entity.setRecLoginUser(loginName);
entity.setCompanyId(SpringSecurityUtils.getCurrentCustomUser()
.getCompanyId());
entity.setSystemId(SpringSecurityUtils.getCurrentCustomUser()
.getSystemId());
logger.warn("{}对象(ID:{}) 被 {} 在 {} 创建",
new Object[] {
object.getClass().toString(), id,
loginName, new Date() });
} else {
// 修改旧对象
entity.setRecUpdateTime(new Date());
entity.setRecModifyUser(loginName);
logger.warn("{}对象(ID:{}) 被 {} 在 {} 修改",
new Object[] {
object.getClass().toString(), id,
loginName, new Date() });
}
}
}
}
public class SpringSecurityUtils {
/**
* 取得当前用户的User实例, 如果当前用户未登录则返回null.
*/
public static CustomerUserDetails getCurrentCustomUser() {
Authentication authentication = getAuthentication();
if (authentication != null && authentication.getPrincipal() != null
&& !authentication.getPrincipal().equals("anonymousUser"))
return (CustomerUserDetails) authentication.getPrincipal();
return null;
}
/**
* 取得Authentication, 如当前SecurityContext为空时返回null.
*/
private static Authentication getAuthentication() {
SecurityContext context = SecurityContextHolder.getContext();
if (context != null)
return context.getAuthentication();
return null;
}
}
我没有办法验证重复这个过程,hibernate应该不会出问题,只是猜测可能的情况是,用户在调用saveorupdate方法后,由于数据库延时,而导致卡住,但是这个时候,刚好session过期了,通过SecurityContextHolder无法获得用户信息,从而导致了设置用户,公司这个业务的失败,大家能不能帮我分析一下我的猜测是否正确,如何验证,又如何解决。部署在jboss5.01GA下没有这样的问题,但是月前部署在tomcat6.0.18下开始出现问题,会和tomcat有关吗,拿不到session?
分享到:
相关推荐
- Spring通过HibernateTemplate或JpaTemplate提供了对Hibernate的封装,使得在Spring应用中使用Hibernate变得更加简单,避免了直接操作SessionFactory和Session。 - Spring事务管理(PlatformTransactionManager)...
SpringBoot+SpringSecurity处理Ajax登录请求问题 ...使用SpringBoot+SpringSecurity处理Ajax登录请求问题需要我们了解SpringBoot、SpringSecurity、MyBatis等技术框架,并掌握相关的配置和实现细节。
Spring Security 3.0.1 作为一次 bug 修复版本,虽然没有添加新功能,但通过修正已知问题提高了系统的稳定性和安全性。通过上述知识点的介绍,我们了解了 Spring Security 的核心概念、配置方式以及一些高级特性,这...
在本项目中,我们主要探讨的是如何利用Spring MVC和Spring Security框架构建一个基本的无数据库登录系统。Spring MVC是Spring框架的一部分,用于处理Web应用程序的请求-响应模型,而Spring Security则是一个强大的...
Spring Security 是一个基于 Java 的安全框架,旨在提供身份验证、授权和访问控制等功能。下面是 Spring Security 的主要知识点: 一、身份验证(Authentication) 身份验证是指对用户身份的验证,以确保用户的...
Spring Security 最初是由 Luke Taylor 和 Ray Ryan 开发的名为 Acegi Security 的项目,在 2005 年被并入 Spring 项目,并重新命名为 Spring Security。自那时起,Spring Security 经历了多个版本的迭代,不断地...
例如,我们可以查看`UsernamePasswordAuthenticationFilter`如何处理登录请求,`FilterSecurityInterceptor`如何根据预定义的访问规则决定是否允许访问某个URL,以及`SecurityContextHolder`如何存储和管理当前用户...
Spring Boot 和 Spring Security 整合是现代Java应用中常见的安全框架集成方式,尤其适用于快速开发微服务架构。Spring Boot 提供了简化配置、快速启动的应用程序开发方式,而 Spring Security 是一个强大的安全管理...
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架,它是安全领域中Spring生态系统的一部分。Spring Security旨在为Java应用程序提供一个全面的安全解决方案,尤其适用于企业级应用场景。它主要...
Spring Boot 和 Spring Security 整合实例详解 Spring Boot 是一个快速开发框架,它简化了 Spring 应用的初始搭建以及开发过程。而 Spring Security 是一个强大的安全框架,用于处理身份认证(Authentication)和...
Spring Boot作为Java领域中流行的微服务框架,因其便捷的配置和快速的开发体验,被广大开发者所喜爱。而JWT(JSON Web Token)则是一种轻量级的身份验证机制,广泛用于现代Web应用的安全认证。在本项目中,我们将...
在微服务架构中,安全问题尤为重要,而Spring Cloud Security作为Spring Cloud生态的一部分,为开发者提供了强大的安全管理和身份验证功能。本文将深入探讨Spring Cloud Security在用户身份认证和权限管理方面的应用...
Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,常用于保护基于Java的Web应用程序。而Spring MVC是Spring框架的一部分,专门处理Web应用的请求和响应。当这两者结合时,可以构建出安全、高效的...
5. **安全上下文**:理解`SecurityContextHolder`如何存储和管理当前用户的认证信息。 6. **测试**:通过单元测试和集成测试来验证自定义的安全逻辑。 通过以上分析和实践,开发者可以更好地掌握SpringSecurity的...
Spring Security 是一个强大的且高度可定制的 Java 安全框架,用于处理Web应用程序的安全性问题。在Spring Security 3.1版本中,该框架提供了一套完善的解决方案来管理认证、授权以及访问控制。这个实例主要展示了...
总的来说,Spring Security的动态授权功能使得权限管理变得更加灵活和高效。通过对源代码的适当修改,我们可以构建一个完全可配置的权限管理系统,适应不断变化的业务需求。这个过程涉及多个组件的定制,但一旦设置...
Spring Security 是一个强大的且高度可定制的身份验证和访问控制框架,广泛用于构建安全的 Java Web 应用程序。本入门教程将带你深入了解 Spring Security 3 的核心概念、配置以及实际应用。 1. **核心概念** - **...
在本文中,我们将深入探讨如何将Spring Boot与Spring Security和MyBatis-Plus进行整合,以便构建一个安全、高效的数据驱动的应用程序。Spring Boot简化了Java应用的开发过程,而Spring Security则为应用程序提供了...