0

我有一个使用基本身份验证的 Spring Security 保护的 SOAP Web 服务。

我编写了一个访问此 Web 服务的 Swing 应用程序。当应用程序启动时,会出现一个登录对话框,用户可以在其中输入其凭据。当用户单击登录按钮时,将使用给定的凭据创建 JAXWS 客户端。我还想为登录的用户提供注销的可能性。Spring Security 需要访问 URL 才能注销。这在独立应用程序中如何工作?这应该通过 CXF 还是使用简单的 HTTP 客户端来完成?

4

3 回答 3

1

完全避免会话,并让您的 JAXClient 在每个连接请求上重新进行身份验证。stateless配置从 Spring Security 3.1 中可用的 secuity.xml 。

于 2013-01-06T12:34:53.887 回答
0

好的,我不会争论有状态与无状态。如果您需要从 Swing 应用程序中注销,只需向配置的注销 URL 发送一个 HTTP GET 请求,同时发送会话 ID。为此,您甚至不需要 Apache HttpClient:

String url = "http://example.com/logout";
String charset = "UTF-8";
String session = ";jsessionid=" + sessionId;
URLConnection connection = new URL(url + session).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
// ...

有关详细信息,请参阅https://stackoverflow.com/a/2793153/131929(触发 HTTP GET 请求)。

您可以将会话 ID 直接附加到 URL,如上所示,或者将其作为常规 cookie 标头发送,如下所示:

connection.addRequestProperty("Cookie", "JSESSIONID=" + sessionId);
于 2013-01-06T22:41:28.137 回答
0

你如何实现这一点并不重要。唯一的要求是创建 HTTP GET 以注销 URL,但您的请求应包含会话的会话 ID。否则 Spring 无法知道要使哪个会话无效。所以,我认为对您来说最简单的方法是使用您当前使用的同一个客户端。

于 2013-01-06T11:30:15.673 回答