问题是Spring Security不会使Authentication对象作为容器中的bean可用,因此无法轻松地将其注入或自动接线。
在开始使用Spring Security之前,我们将在容器中创建一个会话范围的bean来存储Principal,将其注入“
AuthenticationService”(单例),然后将该bean注入需要当前Principal知识的其他服务中。
如果要实现自己的身份验证服务,则基本上可以执行相同的操作:创建一个具有“
principal”属性的会话范围的Bean,将其注入到身份验证服务中,让auth服务在成功的auth上设置该属性,然后根据需要使auth服务可用于其他bean。
对于使用SecurityContextHolder,我不会感到很糟糕。虽然。我知道这是静态的/
Singleton,Spring不鼓励使用此类东西,但它们的实现要注意根据环境适当地表现:会话范围在Servlet容器中,线程范围在JUnit测试中,等等。真正的限制因素Singleton的含义是它提供对不同环境不灵活的实现。



