5

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

<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) 是在哪里定义的?

QueryJdbcAuthenticationProperties我认为在定义这些数据库属性时已经创建了该对象 wrt 子类。

4

2 回答 2

1

当您查看您描述的类时,即AbstractJpaPropertiesand QueryJdbcAuthenticationProperties,您会在它们的开头看到类似这样的内容:

// ...
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 覆盖安装- 对于常见的 CAS 使用而言,它通常更容易。如果您仍然需要接触这些课程,则需要按照我上面提到的设置 Lombok。

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

于 2019-12-12T18:25:16.250 回答
-1

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

更新您的 pom 以包括:

<dependency>
     <groupId>org.apereo.cas</groupId>
     <artifactId>cas-server-support-jdbc-drivers</artifactId>
     <version>${cas.version}</version>
</dependency>
于 2019-12-12T12:20:43.570 回答