Spring安全性和Web服务会话

时间:2012-07-13 10:56:58

标签: java web-services spring spring-security

摘要

如何使用Spring Web服务和Spring安全性获取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

1 个答案:

答案 0 :(得分:2)

/j_spring_security_check由扩展AbstractAuthenticationFilter的{​​{3}}处理。安全上下文在后者的UsernamePasswordAuthenticationFilter方法中设置。

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