Spring安全性搞乱了Hibernate事务

时间:2013-11-26 22:51:14

标签: java spring hibernate spring-mvc spring-security

我正在使用Hibernate 4.2,Spring 3.2和Spring Security 3.1(最新版本,而不是混合弹簧版本)。 Spring Security最近在最后实施,它引起了一个问题。

问题是我有一个在启动时初始化Hibernate连接数据库的类。它将少量对象写入数据库。简化以便于理解。

public class User {
    @Id String username;
    @ManyToMany List<Present> presents;
}

public class Present {
    @Id String present;
}

用于写入数据库的方法:

public class InsertTests {

@Autowired
private AuthService authService;

public void addImages() {
    authService.addPresent("/presents/first.prs");
    authService.addPresent("/presents/second.prs");
}

public void addPeople() {
    // NOTE: The addUser adds a default batch present to the user.
    authService.addUser("Baby");
    authService.addUser("Mommy");
    authService.addUser("Tester");
}

public void initData(){
    addPresents();
    addPeople();
}

}

使用的xml配置:

<bean id="insertTests" class="org.security.service.InsertTests" init-method="initData"/>

使用hd2bm创建3个表,User,User_Present,Present。 如果没有启用Spring Security,则所有内容都会正确插入到数据库中,但是当它在web.xml中启用时:

<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

只有添加的用户和礼物才会被提交到数据库。 User_Presents表将完全为空。我在调试时发现的奇怪的事情是,在方法刚完成之后,数据会出现在数据库中。但是之后spring调用了一个contextDestroy链来擦除表。在应用程序运行后添加User + Present。还有另一种方法我应该初始化默认方法吗?

0 个答案:

没有答案