1

概括

如何使用 Spring Web 服务和 Spring Security 获取 Web 服务客户端的会话?

细节

提交后

<form method="POST" action="<c:url value="/j_spring_security_check" />">...</form>

我注意到您可以:

public class MyUserDetailsService implements UserDetailsService {}

这将允许您覆盖方法,例如loadUserByUsername(String username)因此能够检索提交的用户名并进行数据库查找以返回用户对象。

然而,我的问题是我不确定在哪里SecurityContextHolder设置。我可以通过使用这行代码来获取用户对象:

User user = (User) SecurityContextHolder.getContext().getAuthentication().getPrincipal();

但我不确定它是如何设置的。我想知道提交上述表格后的流程,以便确定如何SecurityContextHolder设置。

我想知道这一点的原因是因为我想将它用作 Web 服务客户端身份验证的“会话”,而不是让客户端在每个请求中重新提交凭据。


春季版:3.0.2.RELEASE

4

1 回答 1

2

/j_spring_security_checkUsernamePasswordAuthenticationFilterwhich extends处理AbstractAuthenticationFilter。安全上下文是在后者的 successfulAuthentication方法中设置的。

但是,Web 服务客户端通常是无状态的,并且更有可能使用带有共享密钥的基本身份验证之类的东西。我不确定根据安全上下文内容滚动您自己的会话系统会有多大好处。如果您担心性能,那么您可以在服务器上使用身份验证信息缓存。

于 2012-07-13T17:14:24.447 回答