lee 819 0 2017-04-12 22:11:49

参考地址:spring文档

9.3.2直接设置SecurityContextHolder内容

事实上,Spring Security不介意你把Authentication对象放在里面SecurityContextHolder。唯一的关键要求是,SecurityContextHolder包含一个Authentication代表在之前AbstractSecurityInterceptor(我们将在后面看到更多)需要授权用户操作的主体。

您可以(和许多用户做)编写自己的过滤器或MVC控制器,以提供与不基于Spring Security的认证系统的互操作性。例如,您可能使用容器管理身份验证,使当前用户可从ThreadLocal或JNDI位置获得。或者,你可能为一个有遗留的专有认证系统,这是一个公司的“标准”,你几乎无法控制的公司工作。在这样的情况下,很容易让Spring Security工作,并仍然提供授权功能。所有你需要做的是编写一个过滤器(或等效的),从一个位置读取第三方用户信息,构建一个Spring Security特定的Authentication对象,并将其放入SecurityContextHolder。在这种情况下,您还需要考虑通常由内置的身份验证基础结构自动处理的事情。例如, 在将响应写入客户端脚注之前 ,您可能需要抢先创建HTTP会话以缓存请求之间的上下文:[响应已提交后无法创建会话。

如果你想知道如何AuthenticationManager在一个现实世界的例子中实现,我们将在核心服务章节中看到。

编程技术