【问题标题】:CAS Database Authentication is not workingCAS 数据库身份验证不起作用
【发布时间】:2019-12-12 06:47:14
【问题描述】:

我之前的question 的继续。我正在研究 CAS 5 以根据我的需要进行修改。在CAS tutorial 的帮助下,我现在已经完成了自定义身份验证。现在我在pom.xml 中添加了以下依赖项,以通过关注link 连接到数据库。

<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>${cas.version}</version>
</dependency>

并在application.properties中添加了数据库认证属性

cas.authn.jdbc.query[0].sql=some query
cas.authn.jdbc.query[0].url=jdbc:postgresql://127.0.0.1/dbcas
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.PostgreSQLDialect
cas.authn.jdbc.query[0].user=readonly
cas.authn.jdbc.query[0].password=readonly
cas.authn.jdbc.query[0].ddlAuto=none
cas.authn.jdbc.query[0].driverClass=org.postgresql.Driver

但它不起作用意味着得到

类型 'org.apereo.cas.configuration.model.support.jdbc.QueryJdbcAuthenticationProperties' 没有属性“url”

我在这里有什么遗漏吗?任何人都请帮助我。

更新:

我查过QueryJdbcAuthenticationProperties的来源

@RequiredProperty
private String sql;

还有AbstractJpaProperties

private String dialect;
private String ddlAuto;
@RequiredProperty
private String driverClass;
@RequiredProperty
private String url;
@RequiredProperty
private String user;
@RequiredProperty
private String password;

我在 cas-server-core-api-configuration-model-5.3.2.jar 文件中找到了相同的两个类,而这两个在任何其他包和 jar 文件中都找不到。

这里有什么问题。我无法识别它。

如何知道这些属性 (cas.authn.jdbc.query) 的位置 定义?

在定义这些数据库属性时,我认为该对象已创建 w.r.t 子类 QueryJdbcAuthenticationProperties

【问题讨论】:

  • 您是否确认可以连接到127.0.0.1/dbcas?看来您缺少端口。
  • @leopal,这种情况下会使用默认端口,所以这里没问题...
  • 至少有一部分错误的堆栈跟踪会很方便 - 它可以帮助您/我们更好地识别错误发生的位置。
  • @leopal,这里我发布的示例代码不完全一样。
  • @PetrBodnár,没有堆栈跟踪可以发布它在 Eclipse 中显示。

标签: spring postgresql cas single-logout


【解决方案1】:

当您查看您描述的类时,i。 e. AbstractJpaPropertiesQueryJdbcAuthenticationProperties,你会在它们的开头看到这样的内容:

// ...
import lombok.Getter;
import lombok.Setter;

// ...
@Getter
@Setter
public abstract class AbstractJpaProperties implements Serializable {

    // ...
    @RequiredProperty
    private String url = "jdbc:hsqldb:mem:cas-hsql-database";

并且没有用于字段的 getter 和 setter。这意味着Lombok 负责在编译时生成它们。如果您直接从 cas-server-core-api-configuration-model-5.3.2.jar 打开类,您的 IDE 应该会在类大纲中显示 getter 和 setter(仅在已编译的类中)。

所以也许您尝试自己构建这些类(或整个 CAS?)而不在构建路径中包含 Lombok 库?因此,您会收到错误消息:

类型 'org.apereo.cas.configuration.model.support.jdbc.QueryJdbcAuthenticationProperties' 没有属性 'url'

如果是这样,我建议您改用CAS WAR Overlay Installation - 它通常更容易用于常见的 CAS 用法。如果您仍然需要触摸这些类,则需要按照我上面提到的设置 Lombok。

最后,正如 Karan 所写,您可能还需要在 PostgreSQL 驱动程序上添加适当的依赖项,这样当您的应用程序进一步执行时,您就不会收到 NoClassDefFoundError 或类似的信息。

【讨论】:

  • 我已将 lombok 依赖项添加到 pom.xml 并再次构建战争,即使显示相同的错误。
  • 那你使用最新的 Lombok 版本吗?见stackoverflow.com/questions/53866929/…。你还需要从源代码构建吗?
  • 我认为这是由于对象创建而不是因为 lombok。我已将AbstractJpaProperties 中的所有属性从private 更改为public,即使它不起作用。
  • 好吧,我的猜测是在对象创建过程中确实是一个错误 - 在创建 QueryJdbcAuthenticationProperties 的实例并尝试调用相应的设置器后出现错误 - 我认为制作字段 @ 987654334@ 还不够 - 尝试同时定义 getter 和 setter,看看会发生什么......
  • 定义的 getter 和 setter 仍然无法正常工作。我想知道这些属性 (cas.authn.jdbc.query) 是在哪里定义的?我们无权创建QueryJdbcAuthenticationProperties 的对象。
【解决方案2】:

您的属性设置正确。但是 CAS 5.x 还需要某些数据库的驱动程序(并非总是如此)。如果您可以在 pom 中包含以下内容作为依赖项,它应该提供在postgres driver support中指定的必要驱动程序@

更新您的 pom 以包括:

<dependency>
     <groupId>org.apereo.cas</groupId>
     <artifactId>cas-server-support-jdbc-drivers</artifactId>
     <version>${cas.version}</version>
</dependency>

【讨论】:

  • 如果你查看closer,你会发现cas-server-support-jdbc-driverscas-server-support-jdbc的传递依赖。所以问题不应该在这里。
  • 抱歉,5.0.4 版是这样,但 5.3 版不再适用 - 驱动程序不再具有传递性,似乎...
猜你喜欢
  • 2011-08-07
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 2019-07-22
  • 2016-08-05
  • 2012-10-04
相关资源
最近更新 更多