jjzjj

java - Tomcat Windows 服务 (Apache Commons procsrv) "The user name or password is incorrect"

coder 2024-06-11 原文

我花了 2 天多的时间试图让它工作,希望有人能给我指明正确的方向......

我正在尝试以特定用户名的形式在 Windows Server 2012 R2 上运行 Tomcat 8 作为服务。由于我的应用程序的复杂性,我直接运行 tomcat8.exe//IS/... 而不是使用 service.bat 脚本。

当服务运行时,我在公共(public)日志中收到以下错误:

[2016-05-31 18:00:14] [debug] ( prunsrv.c:1679) [ 3280] Commons Daemon procrun log initialized
[2016-05-31 18:00:14] [info]  ( prunsrv.c:1683) [ 3280] Commons Daemon procrun (1.0.15.0 64-bit) started
[2016-05-31 18:00:14] [info]  ( prunsrv.c:1580) [ 3280] Debugging 'CertAccordServer' service...
[2016-05-31 18:00:14] [debug] ( prunsrv.c:1374) [ 3280] Inside ServiceMain...
[2016-05-31 18:00:14] [debug] ( prunsrv.c:844 ) [ 3280] reportServiceStatusE: 2, 0, 3000, 0
[2016-05-31 18:00:14] [info]  ( prunsrv.c:1127) [ 3280] Starting service...
[2016-05-31 18:00:14] [error] (rprocess.c:497 ) [ 3280] The user name or password is incorrect.
[2016-05-31 18:00:14] [error] ( prunsrv.c:1210) [ 3280] Failed to create process
[2016-05-31 18:00:14] [error] ( prunsrv.c:1210) [ 3280] The user name or password is incorrect.
[2016-05-31 18:00:14] [error] ( prunsrv.c:1536) [ 3280] ServiceStart returned 1
[2016-05-31 18:00:14] [error] ( prunsrv.c:1536) [ 3280] The user name or password is incorrect.
[2016-05-31 18:00:14] [debug] ( prunsrv.c:844 ) [ 3280] reportServiceStatusE: 1, 1066, 0, 1
[2016-05-31 18:00:14] [info]  ( prunsrv.c:1582) [ 3280] Debug service finished with exit code 1
[2016-05-31 18:00:14] [error] ( prunsrv.c:1755) [ 3280] Commons Daemon procrun failed with exit value: 3 (Failed to run service as console application)
[2016-05-31 18:00:14] [error] ( prunsrv.c:1755) [ 3280] The user name or password is incorrect.

这是我用来添加服务的完整命令:

./tomcat8.exe \
  //IS//MyServer \
 --LogLevel Debug \
  --Description "My service info" \
  --DisplayName "My Server" \
  --Install 'C:\Program Files\MyServer\tomcat\bin\tomcat8.exe' \
  --LogPath 'C:\ProgramData\MyServer\tomcat\logs' \
  --ServiceUser 'myuser@contoso.com' \
  --ServicePassword test123 \
  --StdOutput auto \
  --StdError auto \
  --StartImage "C:\Program Files\MyServer\java\bin\java.exe" \
  --Startup auto \
  --StartMode exe \
  --StopMode exe \
  --StartParams start \
  --StopParams stop \
  --StartClass org.apache.catalina.startup.Bootstrap \
  --StopClass org.apache.catalina.startup.Bootstrap \
  --JvmOptions "-Dcmb.productdir=C:\Program Files\MyServer;-Dcmb.datadir=C:\ProgramData\MyServer;-Dcatalina.home=C:\Program Files\MyServer\tomcat;-Dcatalina.base=C:\ProgramData\MyServer\tomcat;-Djava.endorsed.dirs=C:\Program Files\MyServer\tomcat\endorsed;-Djava.io.tmpdir=C:\ProgramData\MyServer\tomcat\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=C:\ProgramData\MyServer\tomcat\conf\logging.properties" \
  --JvmMs 256m \
  --JvmMx 1024m \
  --Classpath "C:\Program Files\MyServer\tomcat\bin\bootstrap.jar;C:\Program Files\MyServer\tomcat\bin\tomcat-juli.jar;C:\ProgramData\MyServer\resource;C:\Program Files\MyServer\resource"

代替--ServiceUser 和--ServicePassword 我也试过--User 和--Password。失败也是一样。

当我使用 --ServiceUser 并进入 Windows 服务时,找到 MyServer -> Properties -> LogOn -> This Account 显示 myuser@contoso.com。当我使用 --User 时,属性面板将“此帐户”设为空白并选择“本地系统”。

myuser@contoso.com 是一个 AD 帐户。在添加 tomcat8 服务的本地系统上,它有一个组策略,该策略赋予它“作为服务登录”。

我还验证了 myuser@contoso.com 是一个有效的帐户,并且通过从 cmd 提示符运行此密码匹配:

runas /noprofile /user:myuser@contoso.com notepad
Enter the password for myuser@contoso.com: test123

当我查看 Apache Commons procsrv C 代码时,我发现这部分似乎是触发“创建进程失败”和“用户名或密码不正确”错误的地方:

  if (!LogonUserW(szUsername,
                    NULL,
                    szPassword,
                    bLogonAsService ? LOGON32_LOGON_SERVICE : LOGON32_LOGON_NETWORK,
                    LOGON32_PROVIDER_DEFAULT,
                    &hUser)) {
        /* Logon Failed */
        apxLogWrite(APXLOG_MARK_SYSERR);
        return NULL;
    }

我用上面的代码编写了一个简单的 C 程序,并验证了如果 szPassword 为 NULL 或与 myuser@contoso.com 的 AD 密码不匹配,我得到“用户名或密码不正确”。

我想不出还有什么可以尝试的。我卡住了。 :(

最佳答案

查看 Apache Commons Daemon code ,我看到 Tomcat 真正需要用户详细信息的唯一时间是当它作为单独的可执行文件启动时 - 即当您将其安装为 -StartMode exe 时。

service.bat中查看tomcat正常安装的方式,我看到这使用了 JNI 形式的调用 - 即 -StartMode jvm。这不会通过有问题的路径,因此应该避免您的用户/密码问题。

或者,如果您确实需要 Tomcat 作为单独的可执行文件运行...您可以在上面链接的同一 Apache Commons 代码中看到,它从命令行和 Windows 注册表的组合中获取所有数据。由于您安装的服务没有命令行参数,它会尝试在注册表中查找用户和密码。此外,由于您在安装时没有指定 UserPassword,因此它也不会将它们保存到注册表中。因此,它会引入空值。

因此,您有两种可能的方法可以解决此问题:

  1. 在 JVM 模式下启动(和停止),在安装服务时使用 -StartMode jvm
  2. 在安装服务时指定两种形式的用户密码。这应该将额外数据放入注册表,以便在服务尝试启动时提供这些数据。

关于java - Tomcat Windows 服务 (Apache Commons procsrv) "The user name or password is incorrect",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37558354/

有关java - Tomcat Windows 服务 (Apache Commons procsrv) "The user name or password is incorrect"的更多相关文章

  1. ruby - 使用 ruby​​ 和 savon 的 SOAP 服务 - 2

    我正在尝试使用ruby​​和Savon来使用网络服务。测试服务为http://www.webservicex.net/WS/WSDetails.aspx?WSID=9&CATID=2require'rubygems'require'savon'client=Savon::Client.new"http://www.webservicex.net/stockquote.asmx?WSDL"client.get_quotedo|soap|soap.body={:symbol=>"AAPL"}end返回SOAP异常。检查soap信封,在我看来soap请求没有正确的命名空间。任何人都可以建议我

  2. ruby-on-rails - rails : "missing partial" when calling 'render' in RSpec test - 2

    我正在尝试测试是否存在表单。我是Rails新手。我的new.html.erb_spec.rb文件的内容是:require'spec_helper'describe"messages/new.html.erb"doit"shouldrendertheform"dorender'/messages/new.html.erb'reponse.shouldhave_form_putting_to(@message)with_submit_buttonendendView本身,new.html.erb,有代码:当我运行rspec时,它失败了:1)messages/new.html.erbshou

  3. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  4. ruby - 具有身份验证的私有(private) Ruby Gem 服务器 - 2

    我想安装一个带有一些身份验证的私有(private)Rubygem服务器。我希望能够使用公共(public)Ubuntu服务器托管内部gem。我读到了http://docs.rubygems.org/read/chapter/18.但是那个没有身份验证-如我所见。然后我读到了https://github.com/cwninja/geminabox.但是当我使用基本身份验证(他们在他们的Wiki中有)时,它会提示从我的服务器获取源。所以。如何制作带有身份验证的私有(private)Rubygem服务器?这是不可能的吗?谢谢。编辑:Geminabox问题。我尝试“捆绑”以安装新的gem..

  5. ruby - 检查 "command"的输出应该包含 NilClass 的意外崩溃 - 2

    为了将Cucumber用于命令行脚本,我按照提供的说明安装了arubagem。它在我的Gemfile中,我可以验证是否安装了正确的版本并且我已经包含了require'aruba/cucumber'在'features/env.rb'中为了确保它能正常工作,我写了以下场景:@announceScenario:Testingcucumber/arubaGivenablankslateThentheoutputfrom"ls-la"shouldcontain"drw"假设事情应该失败。它确实失败了,但失败的原因是错误的:@announceScenario:Testingcucumber/ar

  6. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  7. ruby-on-rails - 启动 Rails 服务器时 ImageMagick 的警告 - 2

    最近,当我启动我的Rails服务器时,我收到了一长串警告。虽然它不影响我的应用程序,但我想知道如何解决这些警告。我的估计是imagemagick以某种方式被调用了两次?当我在警告前后检查我的git日志时。我想知道如何解决这个问题。-bcrypt-ruby(3.1.2)-better_errors(1.0.1)+bcrypt(3.1.7)+bcrypt-ruby(3.1.5)-bcrypt(>=3.1.3)+better_errors(1.1.0)bcrypt和imagemagick有关系吗?/Users/rbchris/.rbenv/versions/2.0.0-p247/lib/ru

  8. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  9. ruby-on-rails - 迷你测试错误 : "NameError: uninitialized constant" - 2

    我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test

  10. ruby-on-rails - 相关表上的范围为 "WHERE ... LIKE" - 2

    我正在尝试从Postgresql表(table1)中获取数据,该表由另一个相关表(property)的字段(table2)过滤。在纯SQL中,我会这样编写查询:SELECT*FROMtable1JOINtable2USING(table2_id)WHEREtable2.propertyLIKE'query%'这工作正常:scope:my_scope,->(query){includes(:table2).where("table2.property":query)}但我真正需要的是使用LIKE运算符进行过滤,而不是严格相等。然而,这是行不通的:scope:my_scope,->(que

随机推荐