2010-11-18 35 views
11

Tôi có hai ứng dụng web cần chạy trên Tomcat 6, MS SQL 2008 và JTDS-1.2.2 làm trình điều khiển.java.sql.SQLException: Lỗi I/O: Lỗi SSO: Thư viện SSPI gốc

Nếu tôi bắt đầu chỉ có một ứng dụng web tất cả mọi thứ đang làm việc tốt, nhưng ngay sau khi tôi bắt đầu một giây tôi nhận được lỗi sau (nó không quan trọng thứ tự):

java.sql.SQLException: I/O Error: SSO Failed: Native SSPI library 

Tất nhiên, thư viện ntlmauth.dll là dưới C:\WINDOWS\system32

Dường như ứng dụng thứ hai bắt đầu không thể tìm thấy ntlmauth.dll cho lần đăng nhập một lần.

+0

Nó hink các DLL vẫn có thể được tải và không thể được nạp lại vào trường hợp đang chạy khác. Bạn có thể kiểm tra điều này, bằng cách đặt DLL vào thư mục cài đặt của (các) tomcat của bạn và cung cấp đường dẫn của một số DLL nhất định cho ứng dụng của bạn. –

Trả lời

17

Đây là giải pháp:

Tải jTDS driver, giải nén nó, và sao chép x86\SSO\ntlmauth.dll-jdk\jre\bin.

Điều này sẽ giải quyết được vấn đề của bạn.

Edit:

Nếu không có JDK cài đặt con đường đối với tôi là C:\Program Files\Java\jre7\bin\ntlmauth.dll

jTDS phải có khả năng tải các thư viện SPPI mẹ đẻ (ntlmauth.dll). Đặt DLL này ở bất kỳ đâu trong đường dẫn hệ thống (được định nghĩa bởi biến hệ thống PATH) và bạn đã hoàn tất.

+0

cảm ơn! điều này giải quyết vấn đề của tôi :) – Deiwys

17

Tôi lừa bóng qua này bằng cách thay đổi url từ

jdbc:jtds:sqlserver://host_server:1433/Database_name 

để

jdbc:jtds:sqlserver://host_server:1433/Database_name;user=XXX;password=YYY 

Rõ ràng, "Khi URL [không] không chứa người dùng và mật khẩu tài sản, hệ thống sử dụng phương thức xác thực Windows, và lỗi "SSPI Native library not found" xuất hiện ".

+3

Bạn chỉ cần chấm dứt 3 giờ gỡ lỗi không kết quả. Hoan hô! – reinierpost

+0

Vâng, tôi nghĩ rằng nó đã cho tôi một khoảng thời gian dài để tìm thấy các thiết lập ma thuật. – Speck

+2

downvoted vì cha mẹ đang hỏi về SSO và câu trả lời này không sử dụng SSO (xác thực Windows) nhưng xác thực SQL Server thay vào đó, vì vậy không giải quyết được vấn đề cha mẹ – Jacob

2

Nếu bạn đang cố gắng chạy hai (hoặc nhiều) ứng dụng Tomcat trên cùng một máy chủ truy cập SQL Server bằng trình điều khiển JTDS và xác thực cửa sổ, câu trả lời rất hữu ích của Chris White là here.

Chris' câu trả lời đã làm với sqljdbc_auth.dll, nhưng những kiến ​​nghị đều giống nhau cho người lái xe jtds và ntlmauth.dll:

  1. Đặt ntlmauth.dll vào thư mục tomcat 7.0\bin. Trên thực tế, tôi tin rằng bạn có thể đặt ntlmauth.dll vào bất kỳ thư mục nào trong đường dẫn hệ thống hoặc thư mục Java jre\bin.
  2. Quan trọng, không bó jar JTDS vào tệp chiến tranh của bất kỳ ứng dụng Tomcat nào bằng trình điều khiển JTDS. Thay vào đó, hãy đặt một bản sao trong thư mục Tomcat\lib, nơi Tomcat sẽ tải nó và làm cho nó có sẵn cho tất cả các ứng dụng.
2

Nếu bạn ở trên cửa sổ 64 bit nhưng chạy java 32 bit (tệp trong tệp chương trình x86) thì bạn cần dll ntlmauth 32 bit chứ không phải 64 bit mà bạn có thể mong đợi.

+1

Có: có thêm thông tin ở đây về việc triển khai cả 32 và 64 nhưng DLL đến vị trí chính xác của chúng: http://stackoverflow.com/a/16429490/1073262 – perlyking

Các vấn đề liên quan