2013-04-18 24 views
3

我在做一個相當有用的在線教程來創建一個使用mysql調用存儲過程的soap服務器。這工作得很好,我得到的代碼將使用像SoapUI這樣的程序正確響應。代碼如下:在java上使用SSL和SOAP,沒有servlet

@WebService 
public class test { 

@WebMethod 
public String login(String username, String password) throws SQLException { 
    String url = "jdbc:mysql://localhost:3306/test"; 
    String DBusername = "test"; 
    String DBpassword = "test"; 
    Connection con = DriverManager.getConnection(url, DBusername, DBpassword); 

    Statement stmt = null; 
    String query = " CALL authorize_user('" + username + "','" + password + "')"; 

    try { 
     stmt = con.createStatement(); 
     ResultSet rs = stmt.executeQuery(query); 
     while (rs.next()) { 
      String login = rs.getString("au_result"); 

      if (login != null) 
       return login; 
      else { 
       return "Login Failed"; 
      } 
     } 
    } catch (SQLException e) { 
     System.out.println("Error: " + e); 
    } finally { 
     if (stmt != null) { 
      stmt.close(); 
     } 
    } 
    return "Login Failed"; 
} 

public static void main(String[] args) { 
    test test = new test(); 
    @SuppressWarnings("unused") 
    Endpoint endpoint = Endpoint.publish("http://localhost/testing", test); 
} 

}

所以,當你把一個用戶名和密碼是在數據庫中它會返回一個積極的結果這個工程。這是唯一的測試代碼,因爲可以將代碼注入到代碼中,但是很快就會改變。

但是我試圖找到一種方法來使用此服務器的SSL,我能夠找到的唯一信息是如何使用SSL時使用包裝程序或一些servlet包裝來創建肥皂服務器。我們現在不想這樣,除非我們能找到一個非常好的理由浪費時間學習新的代碼。如何在不使用任何第三方代碼的情況下爲此代碼使用SSL連接?我們已經從我們的常規網站服務器上運行的知名公司獲得了證書。

+3

你見過這個:http://stackoverflow.com/questions/4621313/using-javax-xml-ws-endpoint-with-https? – efan

+1

不要忘記在Connection上調用.close();) –

回答

3

您是否考慮過非編程解決方案?

只需在您的Web服務器之前將Apache與SSL作爲反向代理。

  • 你不需要編寫一行代碼(出於安全漏洞越少可能性)
  • 你得到SSL
  • 你得到平衡(如果你需要它)
  • 你得到高速緩存(如果你需要它) 等
1

您已經包括連接到數據庫來驗證用戶ID和密碼(在下面的示例所示最後一步),這是一種令人困惑,因爲據我所知,這不是一個代碼你需要什麼幫助。首先讓我瞭解您的架構(我希望這是我們如何開始設計數據架構以保護用戶ID存儲)。

web-app -> user authentication client 
    ---->{SOAP CALL}---> 
     SSL-proxy-of-some-sort -> SOAP server -> User Authentication Service -> user ID database. 

這是正確的表示形式嗎?如果是的話,我假設你想要將用戶密碼存儲在埋在防火牆後面的單獨數據存儲中,並且只能使用SOAP訪問,以避免「生活社交」情況(5000萬用戶ID和密碼被黑客竊取)黑客可以通過一些軟注入或其他漏洞訪問數據存儲。如果這個正確的理解?

現在大多數情況下,我同意Victor Ronin的回答,你應該考慮使用帶有SSL的Apache服務器來管理你的「肥皂服務器」。但是,即使訪問SSL封裝的SOAP服務器(無關緊要),仍然需要編寫可處理此SSL通信的Java代碼。我建議你看看這個帖子(不是我的),看看是否有幫助。

http://juliusdavies.ca/commons-ssl/ssl.html

順便說一句,除非你跨越廣域打算爲這個認證,我無法想象需要SSL加密。