我开发了一个带有Waffle的示例java Web应用程序,用于SSO身份验证。我在Tomcat 8中使用Waffle 1.8。我在开发环境(Java 1.8,Tomcat 8,Windows 2012 R2服务器)中运行并验证成功。但是当我在prod环境中运行相同的应用程序(与dev环境相同)时,在尝试访问url时会出现以下错误:
SEVERE [http-nio-443-exec-7] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [Jersey REST Service] in context with path [/Auth-Test] threw exception [Filter execution threw an exception] with root cause java.lang.UnsatisfiedLinkError: Native library (com/sun/jna/win32-x86-64/jnidispatch.dll) not found in resource path ([file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/classes/, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/asm-3.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/guava-18.0.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jersey-bundle-1.17.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/jna-platform-4.2.1.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/log4j-1.2.8.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/slf4j-api-1.7.12.jar, file:/C:/Program%20Files/Apache%20Software%20Foundation/Tomcat%208.0/webapps/Auth-Test/WEB-INF/lib/waffle-jna-1.8.0.jar])at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:866).....
dll文件(com / sun / jna / win32-x86-64 / jnidispatch.dll)位于jna-4.2.1.jar中,jna应该将其解压缩到Tomcat 8.0 / temp文件夹。在我的开发服务器中,在temp文件夹下创建了一个文件夹,并在该文件夹中创建了几个dll文件。而在prod服务器中,在临时文件夹中创建一个空文件夹。根据我的理解,jna无法将jar中的dll文件提取到外部位置。我也尝试将jna-4.2.1.jar和jna-platform-4.2.1.jar从WEB-INF / lib /移动到tomcat8 / lib。仍然没有成功。
我还验证了tomcat在没有安全管理器的情况下运行,以确认该问题与访问权限无关。
现在我无能为力。如果提供解决方案或者至少指向我解决问题的方向,那将是一个很大的帮助。提前谢谢。
答案 0 :(得分:1)
我已经解决了这个问题。 问题的根本原因是jna jar文件在将war文件传输到prod服务器时损坏了。我用prod服务器中的jna jar文件替换了它运行的jar文件的新副本。