Spring 3.0 / Hibernate配置文件的参考问题

时间:2011-11-07 14:05:39

标签: security hibernate spring

所有

我最初的设置是这样的,一切都按预期工作。

WEB-INF
|--spring-servlet.xml
|--classes
   |--hibernate-cfg.xml

spring-servlet.xml

<context:component-scan base-package="foo" />
<tx:annotation-driven/>
<bean id="dataSource" ...
<bean id="sessionFactory" ...
<bean id="transactionManager" ...
<bean ...

hibernate-cfg.xml

<hibernate-configuration>
  <session-factory>
    <mapping ...

我想在混合中添加Spring Security来处理用户身份验证。为了使这个工作,我不得不重构一些东西。我的新设置如下所示:

WEB-INF
|--spring-servlet.xml
|--classes
   |--datasource-cfg.xml
   |--hibernate-cfg.xml

spring-servlet.xml有

<context:component-scan base-package="foo" />
<bean ...

datasource-cfg.xml有

<tx:annotation-driven/>
<bean id="dataSource" ...
<bean id="sessionFactory" ...
<bean id="transactionManager" ...

hibernate-cfg.xml有

<hibernate-configuration>
  <session-factory>
    <mapping ...

验证件现在可以使用,但以前工作的部件不再有效。

我现在收到以下消息:

No Hibernate Session bound to thread, and configuration does not allow creation of non-transactional one here
at org.springframework.orm.hibernate3.SpringSessionContext.currentSession(SpringSessionContext.java:63)
at org.hibernate.impl.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:687)

如何让我的应用程序使用Spring Security并将所有数据源/休眠资源放在一个地方?

1 个答案:

答案 0 :(得分:1)

这在web.xml中应该足够了。

<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
    /WEB-INF/spring-security.xml
    classpath:datasource-cfg.xml
  </param-value>
</context-param>

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

然而,我不会混淆配置文件的位置; IMO最好把它们放在一个地方,可能是在类路径上。