我有一个使用基本身份验证的 Spring Security 保护的 SOAP Web 服务。
我编写了一个访问此 Web 服务的 Swing 应用程序。当应用程序启动时,会出现一个登录对话框,用户可以在其中输入其凭据。当用户单击登录按钮时,将使用给定的凭据创建 JAXWS 客户端。我还想为登录的用户提供注销的可能性。Spring Security 需要访问 URL 才能注销。这在独立应用程序中如何工作?这应该通过 CXF 还是使用简单的 HTTP 客户端来完成?
我有一个使用基本身份验证的 Spring Security 保护的 SOAP Web 服务。
我编写了一个访问此 Web 服务的 Swing 应用程序。当应用程序启动时,会出现一个登录对话框,用户可以在其中输入其凭据。当用户单击登录按钮时,将使用给定的凭据创建 JAXWS 客户端。我还想为登录的用户提供注销的可能性。Spring Security 需要访问 URL 才能注销。这在独立应用程序中如何工作?这应该通过 CXF 还是使用简单的 HTTP 客户端来完成?
完全避免会话,并让您的 JAXClient 在每个连接请求上重新进行身份验证。stateless
配置从 Spring Security 3.1 中可用的 secuity.xml 。
好的,我不会争论有状态与无状态。如果您需要从 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);
你如何实现这一点并不重要。唯一的要求是创建 HTTP GET 以注销 URL,但您的请求应包含会话的会话 ID。否则 Spring 无法知道要使哪个会话无效。所以,我认为对您来说最简单的方法是使用您当前使用的同一个客户端。