3

我正在遵循一个相当有用的在线教程来创建一个使用 mysql 调用存储过程的肥皂服务器。这工作得很好,我得到的代码可以使用像 SoapUI 这样的程序正确响应。代码如下:

@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 的方法,而我能找到的唯一信息是如何在使用包装程序或某些 servlet 包装器创建肥皂服务器时使用 SSL。在这一点上我们不想走这条路,除非我们能找到一个非常非常好的理由来浪费时间学习新代码。我将如何在不使用任何第三方代码的情况下为此代码使用 SSL 连接?我们已经拥有一家信誉良好的公司的证书,该证书在我们的常规网站的服务器上运行。

4

3 回答 3

3

您是否考虑过非编程解决方案?

只需将带有 SSL 的 Apache 作为反向代理放在您的 Web 服务器之前。

  • 无需编写一行代码(安全漏洞的可能性较小)
  • 您获得 SSL
  • 你得到平衡器(如果你需要的话)
  • 你得到缓存(如果你需要的话)等等
于 2013-04-28T01:36:37.913 回答
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 和密码)黑客有可能通过某些 SQL 注入软件或其他漏洞访问数据存储。如果这样理解正确吗?

现在在大多数情况下,我同意 Victor Ronin 的上述回应,即您应该考虑使用带有 SSL 的 Apache 服务器来前置您的“soap 服务器”。但是,即使要访问 SSL 包装的 SOAP 服务器(不管您如何操作),您仍然需要编写可以处理这种 SSL 通信的 Java 代码。我建议您查看这篇文章(不是我的),看看是否有帮助。

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

顺便说一句,除非您通过 WAN 进行此身份验证,否则我无法想象需要 SSL 加密。

于 2013-04-30T14:37:51.670 回答
0

您应该尝试使用处理程序链,这样处理程序链将在您的任何肥皂调用之前执行,您可以丢弃任何不适合您想做的任何事情的消息。

更多关于howTo的信息:http://pic.dhe.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=%2Fcom.ibm.websphere.wsfep.multiplatform.doc%2Finfo%2Fae%2Fae% 2Ftwbs_jaxwshandler .html

于 2013-04-30T13:15:41.990 回答