尝试在tomcat下使用netty-tcnative-boringssl-static。从JUnit测试代码时测试它是否正常工作,但在tomcat容器中则不然。 io.netty.handler.ssl.OpenSsl类中的此代码尝试从SSL类的类加载器加载本机库。
private static void loadTcNative() throws Exception {
String os = normalizeOs(SystemPropertyUtil.get("os.name", ""));
String arch = normalizeArch(SystemPropertyUtil.get("os.arch", ""));
Set<String> libNames = new LinkedHashSet<String>(3);
// First, try loading the platform-specific library. Platform-specific
// libraries will be available if using a tcnative uber jar.
libNames.add("netty-tcnative-" + os + '-' + arch);
if (LINUX.equalsIgnoreCase(os)) {
// Fedora SSL lib so naming (libssl.so.10 vs libssl.so.1.0.0)..
libNames.add("netty-tcnative-" + os + '-' + arch + "-fedora");
}
// finally the default library.
libNames.add("netty-tcnative");
NativeLibraryLoader.loadFirstAvailable(SSL.class.getClassLoader(),
libNames.toArray(new String[libNames.size()]));
}
当它单独工作时(例如来自JUnit测试),它在netty-tcnative-boringssl-static jar中找到SSL类,并从那些jar依赖项中的WEB-INF / native获取本机库。 但是当它在tomcat下运行时,它从tomcat库中获取SSL类并且无法找到本机库。
尝试使用tomcat 8和9
答案 0 :(得分:1)
这将很快修复,并成为4.1.9.Final的一部分:
答案 1 :(得分:0)
似乎在这个帖子中找到了解决方案 https://github.com/netty/netty-tcnative/issues/136
我刚刚复制了netty-tcnative-boringssl-static.jar并在tomcat库目录中重新链接了tomcat-jni.jar