我有一个在tomcat 7上运行的Swing-client和Server,它们使用Spring(3.1)HTTP调用程序相互通信。到目前为止,通信工作正常(即使使用TSL),但现在我正在尝试添加Spring Security。
侧注:在典型的Web应用程序中,我将使用基本身份验证来验证用户。在我的CustomAuthenticationProvider为用户返回Authentication对象之后,所有内容都“正常工作”,这意味着在每个进一步的请求中都会自动设置SecurityContext。我想登录会向客户端返回一个会话密钥,该会话密钥会在每次请求时发送以识别会话。
这就是我正在寻找的HTTP-Invoker。目前看起来我在每个请求上都获得了一个新的上下文,这很糟糕,因为我的customAuthenticationManager.authenticate(身份验证身份验证)方法非常有用,而且每个用户会话应该只调用一次。
任何想法?
编辑我在http://forum.springsource.org/showthread.php?10764-Maintaing-State-while-using-HttpInvoker找到了一些提示,但由于此链接超过8年,我希望有一个更简单的解决方案。
答案 0 :(得分:3)
我现在找到了解决方案。首先,您需要知道spring-security部分与web应用程序中的完全相同(非常棒)。
在客户端,您需要更复杂的HTTP客户端实现。我用了org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor
。在服务器端,您可以使用create-session="always"
- <http
- 元素的属性来确保始终创建会话。但是,我发现自己创建会话更好(只需调用httpServletRequest.getSession(),如果不存在则创建一个会话),因为这样你可以指定何时这样做。在我的情况下,我只在身份验证成功时才在我的authenticationProvider中创建会话。