你绝对需要写你自己的.在主体对象中,有用户,在 中还有一个 Details 对象,您可以存储其他登录信息的 Map(字符串,字符串)。UserDetailService
AuthenticationToken
public class RequestFormDeatils extends SpringSecurityFilter {
protected void doFilterHttp(HttpServletRequest request, ...) {
SecurityContext sec = SecurityContextHolder.getContent();
AbstractAuthenticationToken auth = (AbstractAuthenticationToken)sec.getAuthentication();
Map<String, String> m = new HashMap<String, String>;
m.put("myCustom1", request.getParameter("myCustom1"));
m.put("myCustom2", request.getParameter("myCustom2"));
auth.setDetails(m);
}
现在,在代码中的任何位置,您都可以使用 来传播此安全相关信息,而无需将其耦合到对象或将其作为参数传递。我在Spring安全过滤器链的末尾执行此代码。SecurityContext
UserDetails
SecurityFilter
<bean id="requestFormFilter" class="...RequestFormDetails">
<custom-filter position="LAST" />
</bean>
删除用户时(如注销时),此信息将被删除。