Java Spring Security XML配置找不到我的数据源bean定义
MyJava 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文件)也使用数据库连接,因为它查找数
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
问题是调用的第二个文件(myweb-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