jdbc spring 安全性,apache commons dbcp

Posted

技术标签:

【中文标题】jdbc spring 安全性,apache commons dbcp【英文标题】:jdbc spring security, apache commons dbcp 【发布时间】: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 的原因(它在一个过滤器中,但我不记得哪个关闭了我的头顶)。 【参考方案1】:

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

Commons Pool Downloads

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

【讨论】:

好的。有没有办法调试 db 上发生的事情?向数据库发出的查询? 我对 Postgres 不是 100% 熟悉,但是,我敢肯定他们有某种日志记录,你应该可以打开。从您这边,您可以获得 Commons DBCP 的源代码,并查看使用 Eclipse 或 Netbeans 等发送的内容。但是,它可能没有完整的语句(很可能是 Spring Security 生成的准备好的语句和包含所有参数值的对象)。 我已经编辑了这个问题,我还有一点问题:-)【参考方案2】:

不要忘记您还需要 Postgre JDBC 驱动程序,以防万一您还没有包含这些驱动程序。

【讨论】:

"commons" 在整个 spring 参考中使用;但有时有人说在生产中你应该使用 jndi。这只是一个建议还是更强大的东西?【参考方案3】:

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

【讨论】:

【参考方案4】:

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

【讨论】:

好的,使用 ROLE_USER 可以正常工作。我误解了谈论 ROLE_ 的参考,因为它是一种“关键字”。现在我要回到对 utry 的引用,了解所有那些奇怪的“ROLE_”讨论是关于什么的。

以上是关于jdbc spring 安全性,apache commons dbcp的主要内容,如果未能解决你的问题,请参考以下文章

java Spring安全性JDBC身份验证

spring+mybatis整合,org.apache.commons.dbcp.SQLNestedException: Cannot load JDBC driver class '${jd

spring jdbc

spring框架设置jdbc

Spring Security JDBC 和 Hibernate JPA

如何在具有 JDBC 安全性的 Spring Boot 中使用 Flyway?