提交后
<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
答案 0 :(得分:2)
/j_spring_security_check
由扩展AbstractAuthenticationFilter
的{{3}}处理。安全上下文在后者的UsernamePasswordAuthenticationFilter
方法中设置。
但是,Web服务客户端通常是无状态的,并且更可能使用具有共享密钥的基本身份验证之类的东西。我不确定根据安全上下文内容滚动自己的会话系统会有多大好处。如果您担心性能,那么您可以在服务器上使用身份验证信息的缓存。