我有一个 spring-mvc 应用程序,它当前有两个通道——Web 应用程序和一个 REST 服务。两者都有用户的 http 会话,我可以轻松地在我的服务类中获取“当前用户”。
现在我需要开发另一个没有 http 会话并且当前用户依赖于请求参数的 REST 服务。因此控制器将读取该请求参数并找到当前用户。
现在我要么需要: 1. 修改我的服务层方法以接受当前用户作为参数,要么 2. 只需修改从 http 会话中获取当前用户的类。
我还需要创建一个审计日志,我将为此使用 Spring AOP。Aspect 也需要访问“当前用户”。所以选项#1可能对我不起作用,我会选择#2。
对于选项 #2,我将创建一个拦截器,将当前用户放入 ThreadLocal 变量中。新 REST 服务的控制器将执行相同的操作,然后在我的服务层和审计日志方面,我可以从那里获取当前用户。
我以前没有做过这样的事情,想知道是否有更好的方法。或者我应该用这种方法期待什么样的问题。
我将不胜感激任何意见和想法。
盎司
这是我目前获取当前用户的方式:
@Override
public User getCurrentUser()
{
Authentication currentUser = getAuthentication();
return userService.getByLoginName(currentUser.getName());
}
protected Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}