【发布时间】:2013-08-27 17:57:07
【问题描述】:
我希望我的应用程序层知道哪个用户登录以简化方法签名 - 例如方法(所有者,对象)将只是方法(对象)。我使用 Spring Security 来保证安全性,但我希望将 Spring 排除在我的应用程序层之外,因此有一个单独的层仅用于此目的(以及 DTO 转换) - 就像一个外观(应用程序服务的适配器)。
如何在不使用 spring 的情况下让应用层知道用户上下文的操作?
【问题讨论】:
我希望我的应用程序层知道哪个用户登录以简化方法签名 - 例如方法(所有者,对象)将只是方法(对象)。我使用 Spring Security 来保证安全性,但我希望将 Spring 排除在我的应用程序层之外,因此有一个单独的层仅用于此目的(以及 DTO 转换) - 就像一个外观(应用程序服务的适配器)。
如何在不使用 spring 的情况下让应用层知道用户上下文的操作?
【问题讨论】:
您需要注册一个Filter 或HandlerInterceptor 来查看HttpSession,如果用户已登录,则将某种User 表示形式存储在一些static@987654329 中@ 语境。然后任何类都可以访问包含您的User 对象的静态ThreadLocal。
当用户注销或会话到期时,您必须删除此对象。提示:HttpSessionListener.
【讨论】:
HttpServletRequest 或 HttpSession 对象。相反,您应该在static ThreadLocal 中注册它们,然后如果您在同一个Thread 中,您可以从任何班级访问。 This might help.
SecurityContextHolder 正是我所描述的。如果它已经提供,则无需添加任何内容。只需在需要检查用户的任何地方调用该方法即可。