Spring MVC,从服务层的安全上下文中获取主体


问题内容
  1. Principal principal在spring控制器中获取主体作为参数然后将其传递到服务层比立即在服务层中获取主体有什么好处SecurityContextHolder.getContext().getAuthentication().getPrincipal()
  2. 什么是在服务层中获取主体详细信息而无需检查getAuthentication()getPrincipal()对象是否为空的最佳方法(类似于自定义包装器)?

问题答案:
    • 您的服务API将更易于使用。您将直接看到对主体的依赖,因此,在不存在主体的环境中,您不会错误地调用某些服务方法。
    • 通常,在迁移到新的Spring Security版本时,对SpringSecurity代码的依赖性越小,意味着的问题就越少。
    • 您将能够在不存在Spring Security的环境中重用服务层。
  1. 准备一些包装器类(例如AuthenticationService)。向其添加getPrincipal()方法。实施检查。在直接调用SecurityContextHolder的所有位置注入AuthenticationService。