【问题标题】:Session functionality in application layer?应用层的会话功能?
【发布时间】:2013-08-27 17:57:07
【问题描述】:

我希望我的应用程序层知道哪个用户登录以简化方法签名 - 例如方法(所有者,对象)将只是方法(对象)。我使用 Spring Security 来保证安全性,但我希望将 Spring 排除在我的应用程序层之外,因此有一个单独的层仅用于此目的(以及 DTO 转换) - 就像一个外观(应用程序服务的适配器)。

如何在不使用 spring 的情况下让应用层知道用户上下文的操作?

【问题讨论】:

    标签: spring security layer


    【解决方案1】:

    您需要注册一个FilterHandlerInterceptor 来查看HttpSession,如果用户已登录,则将某种User 表示形式存储在一些static@987654329 中@ 语境。然后任何类都可以访问包含您的User 对象的静态ThreadLocal

    当用户注销或会话到期时,您必须删除此对象。提示:HttpSessionListener.

    【讨论】:

    • 你的意思是像this这样的东西吗?
    • @Kboom 类似。但是,使用该解决方案,您将不得不传递 HttpServletRequestHttpSession 对象。相反,您应该在static ThreadLocal 中注册它们,然后如果您在同一个Thread 中,您可以从任何班级访问。 This might help.
    • 或者将 SecurityContextHolder.getContext() 绑定到本地线程会容易得多?如果我错了,请纠正我。我正在寻找最简单的解决方案:)。
    • @Kboom 看,我不知道 Spring Security,但似乎 SecurityContextHolder 正是我所描述的。如果它已经提供,则无需添加任何内容。只需在需要检查用户的任何地方调用该方法即可。
    • 还有一件事 - 你说你不了解 Spring 安全性。但是,我可以在会话创建/销毁事件上注册一个侦听器并将它们绑定到我的应用程序层的函数(例如,当会话被销毁时注销)并具有没有弹簧安全性的安全机制,这是否那么简单?我可以检查 ThreadLocal 变量的状态以确保安全吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-12
    相关资源
    最近更新 更多