【发布时间】:2011-09-24 10:48:48
【问题描述】:
在 Spring Security 中,我定义了一个 jdbc 身份验证管理器:
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service data-source-ref="securityDataSource"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="securityDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="org.postgresql.Driver"/>
<property name="url" value="jdbc:postgresql://127.0.0.1:5432/mydb"/>
... user and password props ...
</bean>
此时我发现我需要 Jakarta Commons DBCP。 我添加了 commons-dbcp-1.4,我得到以下异常:
...java.lang.NoClassDefFoundError: org/apache/commons/pool/KeyedObjectPoolFactory
commons dbcp 1.4 中实际上不包含此路径。
我又错过了什么?
已编辑
好的,将依赖项添加到公共池,它可以工作,因为使用正确的凭据我不再获得“错误凭据”页面。
但我得到一个 HTTP 状态 403 - 访问被拒绝。
似乎我的用户已通过身份验证,但未经授权。
任何想法...? :-)
我的 http 元素是:
<security:http auto-config="true" >
<security:intercept-url pattern="/**" access="ROLE_USER"/>
</security:http>
我有一个“测试”用户,它绑定到“权限”表中的“用户”角色。
谢谢
【问题讨论】:
-
我建议单步调试源代码(通过调试),特别是 JdbcDaoImpl 类,看看它带你去哪里以及生成 403 的原因(它在一个过滤器中,但我不记得哪个关闭了我的头顶)。
标签: java jakarta-ee spring-security apache-commons-dbcp