jdbc spring security, apache commons dbcp

4
在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中。
我错过了什么吗?

编辑
好的,已经添加了对common pool的依赖,因为使用了正确的凭据,我不再收到“凭据无效”的页面。 但是我收到了HTTP状态403 - 拒绝访问的错误信息。
似乎我的用户已经通过身份验证,但没有获得授权。
有什么想法吗...? :-)

我的http元素是:

<security:http auto-config="true" >
    <security:intercept-url pattern="/**" access="ROLE_USER"/>
</security:http>

我有一个“测试”用户,该用户绑定在“authorities”表中的“USER”角色上。

谢谢


我建议通过调试逐步查看源代码,尤其是JdbcDaoImpl类,看看它会带你去哪里,以及是什么生成了403错误(它在其中一个过滤器中,但我不能立即记起是哪个)。 - El Guapo
4个回答

9

Commons DBCP 依赖于 Commons Pools 库,因此您实际上需要下载 commons-pool jar 文件,并将其包含在您的路径中。

Commons Pool 下载

您可能还需要下载 commons-collections 包。


好的。有没有一种方法可以调试数据库上发生的事情?查询被发出到数据库? - AgostinoX
我对Postgres不是100%熟悉,但我确信他们应该有某种日志记录功能可以打开。从你的角度来看,你可以获取Commons DBCP的源代码,并使用Eclipse或Netbeans等工具查看发送的内容。但是,它可能不会包含完整的语句(很可能是Spring Security生成的预处理语句和包含所有参数值的对象)。 - El Guapo
我已经编辑了问题,我还有一个小问题 :-) - AgostinoX

2

jar文件commons-dbcp-1.4不包含类org.apache.commons.pool.keyedobjectpoolfactory
您需要将另一个jar添加到项目的类路径中 - commons-pool-1.4。
您可以从这里下载commons-pool-1.4 http://commons.apache.org/pool/download_pool.cgi


2
尝试将您的测试用户权限更改为ROLE_USER。

好的,使用ROLE_USER很好。我误解了关于ROLE_的参考,认为它是一种“关键字”。现在我回到参考资料中去理解所有那些奇怪的“ROLE_”讨论是关于什么的。 - AgostinoX

1
别忘了你还需要Postgre JDBC驱动程序,以防万一你还没有包含它们。

“commons”在Spring参考文档中被广泛使用;但有时会说在生产环境中应该使用JNDI。这只是一个建议还是更强的要求? - AgostinoX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接