来自GlassFish控制台的Derby身份验证错误,但来自ij的相同凭据有效

2022-08-21 00:00:00 java glassfish derby javadb

我第一次尝试在没有IDE的情况下运行一个Java EE 7Web应用程序,并艰难地完成了学习曲线。为了简单起见,我从GlassFish 4.1和Derby 10.11.1.2开始,这是我用于开发的。

我目前的问题是在GlassFish Web界面上配置连接池时出错。错误为"连接身份验证失败。原因:用户ID或密码无效"。然而,我在一个DoS提示符和Chrome的GlashFish Web控制台中运行了ij。

在ij中,我可以输入‘CONNECT’jdbc:derby:localhost:1527/databasename;user=username;password=password‘;AND I CONNECT FOR并且可以查看表格等。在GlassFish Web控制台中,我的名称/值对具有相同的’USER‘和’PASSWORD‘值,但失败了(完全相同的字母和大小写)。我已尝试更改‘lobaseName’属性,以确保该错误不会误导人,并确认已正确找到数据库。

从表面上看,错误消息似乎是错误的,正如我在DOS窗口中所证明的那样。我确信我做错了什么,但我不知道如何诊断它。有什么建议吗?


所采取步骤的更多细节:(尽管我确信这些步骤中的一些步骤优于其他步骤,但我的不成功让我产生了一种心态,即冗余比省略更好--总的来说,它似乎比基本设置所需的要复杂得多)。我的目标是WildFly,但GlassFish文档更好,所以我想我应该从那里开始。

  1. 相关Windows环境变量:

    JAVA_HOME=C:Program FilesJavajdk1.8.0_40
    DERBY_HOME=%JAVA_HOME%db
    DERBY_INSTALL=%DERBY_HOME%
    JAVADB_HOME=%DERBY_HOME%
    GLASSFISH=C:Program FilesJavaGlassFish-4.1
    Path=%JAVA_HOME%in;%DERBY_HOME%in;%GLASSFISH%in;%GLASSFISH%glassfish
    CLASSPATH=%DERBY_HOME%libderbynet.jar;%DERBY_HOME%libderbytools.jar;%DERBY_HOME%derbyclient.jar;%DERBY_HOME%libderbyrun.jar
    WILDFLY_HOME=C:program filesjavawildfly8.2.0.Final
    
  2. sysinfo显示所有正确的路径和版本

    /li>
  3. 通过BalusC将许多derby JAR从%DERBY_HOME%lib复制到%glassFish%glassfish Domainsdomain1libext。我认为类路径复制了它,但不会有什么坏处
  4. 启动的域‘asadmin start域’默认为域1
  5. 通过更改目录和使用Java启动了数据库。我想使用‘asadmin启动-数据库--数据库数据库路径’,但这总是启动了错误的版本。GlassFish和JDK都打包了derby/javadb,我和他们都想不出如何升级GlassFish或以其他方式启动正确的版本

    cd usersjohn.netbeans-derby (root of the DB created by Netbeans)
    Java –jar "%derby_home%libderbyrun.jar" server start
    
  6. 将浏览器连接到‘localhost:4848’以创建JDBC连接池和资源
连接池:池名称=ConnectionPool,资源类型=javax.sql.DataSource,数据库驱动程序供应商=Derby,未启用自检(找到的文档很少解释它是什么)-步骤2保留为默认值 编辑连接启用池的Ping On常规选项卡识别错误,其他属性选项卡:将用户更改为数据库用户名,将其他属性保留为默认,添加...密码=数据库密码,数据库名称=ClubScore 在提示设置每个属性的过程中出现了错误。未显示缺少URL的错误,但测试了以下使用和不使用URL=jdbc:derby://localhost:1527/ClubScoring

的步骤

JDBC资源。已添加JDBC/ClubScoring,pool=ConnectionPool=>已选择并启用

  1. 使用‘asadmin start-database’从正确的目录启动数据库确实会让应用程序找到正确的数据库,但它会崩溃,因为数据库是用10.11.1.2版创建的,并且此命令启动了10.10.2.0的GlassFish版本

很抱歉这么长时间,但我找不到任何地方以简单的方式列出所有步骤,并认为从长远来看,细节可以节省时间。


解决方案

我今天处理这个问题,找到了一个解决方案: https://db.apache.org/derby/docs/10.14/ref/rrefattribsecmech.html

基本上唯一允许的安全选项(就10.14而言)是3、4和9。

4是缺省值,意思是";,而只是userid";。您可能认为这意味着只要给出一个用户ID,您就可以连接。但同时设置两个似乎是个问题。

若要使用(明文)密码和用户ID,您必须指定3。如果属性被删除或也为0,它也有效,但我认为这样做不会获得任何安全性。

相关文章