Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring Security XML配置找不到我的数据源bean定义_Java_Spring_Spring Mvc_Servlets_Spring Security - Fatal编程技术网

Java Spring Security XML配置找不到我的数据源bean定义

Java Spring Security XML配置找不到我的数据源bean定义,java,spring,spring-mvc,servlets,spring-security,Java,Spring,Spring Mvc,Servlets,Spring Security,MyWEB-INF/WEB.xml执行以下操作- 1) 加载我的servlet上下文-WEB-INF/SpringWebservlet.xml 2) 加载我的spring安全配置文件-WEB-INF/spring security.xml 3) 添加springSecurityFilterChain过滤器以拦截传入的URL web.xml spring security.xml 问题是调用的第二个文件(myweb-INF/spring security.xml文件)也使用数据库连接,因为它查找数

My
WEB-INF/WEB.xml
执行以下操作-

1) 加载我的servlet上下文-
WEB-INF/SpringWebservlet.xml

2) 加载我的spring安全配置文件-
WEB-INF/spring security.xml

3) 添加
springSecurityFilterChain
过滤器以拦截传入的URL

web.xml
spring security.xml
问题是调用的第二个文件(my
web-INF/spring security.xml
文件)也使用数据库连接,因为它查找数据库中存储的角色和凭据

<http auto-config="true" use-expressions="true">
  <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />

  <!-- access denied page -->
  <access-denied-handler error-page="/403" />

  <form-login
    login-page="/login"
    default-target-url="/"
    authentication-failure-url="/login?error"
    username-parameter="email"
    password-parameter="password" />
  <logout logout-success-url="/login?logout"  />

  <!-- enable csrf protection -->
  <csrf/>
</http>

<!-- Select users and user_roles from database -->
<authentication-manager>
  <authentication-provider>
  <jdbc-user-service
    data-source-ref="dataSource"
    users-by-username-query="SELECT email, password FROM users WHERE email=?"
    authorities-by-username-query="SELECT email, role FROM user_roles WHERE email=?" />
  </authentication-provider>
</authentication-manager>
我最好的猜测是因为
dataSource
是在第一个XML配置(
WEB-INF/SpringWebservlet.XML
)中定义的,它不可用于后者(
WEB-INF/SpringSecurity.XML

是这样吗

如果是这样的话,那么定义
数据源
bean的最佳方法是什么,这样所有的XML文件都可以根据需要调用它?我假设我可能会添加一些其他组件,这些组件在某些时候也需要DB访问


谢谢

在web.xml中尝试更改此选项

上下文配置位置 /WEB-INF/spring-security.xml,WEB-INF/spring-WEB-servlet.xml
这对你有帮助

为什么有多个配置文件?你真的需要吗?
...

<!-- Load Properties -->

<beans:bean
  class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
</beans:bean>

<!-- Database / JDBC -->

<beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
  <beans:property name="driverClassName" value="${jdbc.driverClassName}" />
  <beans:property name="url" value="${jdbc.url}" />
  <beans:property name="username" value="${jdbc.username}" />
  <beans:property name="password" value="${jdbc.password}" />
</beans:bean>

...
<http auto-config="true" use-expressions="true">
  <intercept-url pattern="/admin**" access="hasRole('ROLE_ADMIN')" />

  <!-- access denied page -->
  <access-denied-handler error-page="/403" />

  <form-login
    login-page="/login"
    default-target-url="/"
    authentication-failure-url="/login?error"
    username-parameter="email"
    password-parameter="password" />
  <logout logout-success-url="/login?logout"  />

  <!-- enable csrf protection -->
  <csrf/>
</http>

<!-- Select users and user_roles from database -->
<authentication-manager>
  <authentication-provider>
  <jdbc-user-service
    data-source-ref="dataSource"
    users-by-username-query="SELECT email, password FROM users WHERE email=?"
    authorities-by-username-query="SELECT email, role FROM user_roles WHERE email=?" />
  </authentication-provider>
</authentication-manager>
Cannot resolve reference to bean 'dataSource' while setting bean property 'dataSource'; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'dataSource' is defined