【发布时间】:2016-10-24 21:52:51
【问题描述】:
我使用HttpHandler和HttpFilter以及我们公司内部的授权服务来实现对jsp页面的授权。所以逻辑是: 如果我收到 HttpRequest 并且标头中有用户,我会向我们的服务发送请求以获取该用户的访问角色。比我想将这些角色作为属性添加到 HttpSession 中。我在 HttpHandler 中实现了这个逻辑,它从 Jetty-server 扩展了 AbstractHandler。因此角色已成功添加到会话对象中。然后请求进入过滤器。在我的过滤器中,我试图从会话中获取这些值,但没有运气。我检查了会话的字符串哈希值到处都是相同的,但在处理程序中我能够将值视为属性,在过滤器中根本没有属性。然后我检查了 Handler 和 Filter 中的 hashCode() 是否为 Session 对象返回不同的值,即使它们具有相同的哈希会话值。
您能否提出一些建议来弄清楚为什么会话标识符相同,但对象不同并且过滤器中没有属性值。
这就是我在 Handler 的处理方法中为会话添加价值的方式:
httpServletRequest.getSession(true).setAttribute(ACCESS_ROLES, StringUtils.join(getEntitlementAuthorities(user), ENTITLEMENT_ROLES_DIVIDER));
这就是我尝试在过滤器中取回数据的方式:
Object attributesObject = httpRequest.getSession().getAttribute(ACCESS_ROLES);
【问题讨论】:
-
您是否考虑过按照Configuring Security 中的说明集成您的 Jetty 安全性?
标签: java session servlets jakarta-ee