摘要
如何使用 Spring Web 服务和 Spring Security 获取 Web 服务客户端的 session ?
详细信息
提交后
<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 服务客户端身份验证的“ session ”,而不是让客户端在每次请求时重新提交凭据。
<小时/> Spring 版本:3.0.2.RELEASE最佳答案
/j_spring_security_check
由 UsernamePasswordAuthenticationFilter
处理它扩展了AbstractAuthenticationFilter。安全上下文设置在后者的successfulAuthentication
中。方法。
但是,Web 服务客户端通常是无状态的,并且更有可能使用带有共享 key 的基本身份验证之类的方法。我不确定根据安全上下文内容滚动您自己的 session 系统会有多大好处。如果您担心性能,那么您可以使用服务器上的身份验证信息缓存。
关于java - Spring Security 和 Web 服务 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11469120/