2015-01-31 67 views
0

是否可以从RealmBase.athenticate方法访问会话ID?我需要从我的自定义领域类中存储与数据库关联的其他信息,并在以下请求期间检索它。我正在使用Tomcat 8.谢谢!从RealmBase对象访问sessionid

回答

0

编号

认证不需要使用会话,因此它不会被烘焙到API中。身份验证也应该从会话管理中分离出来,所以它也不会被烘焙到API中。

你可能仍然可以做到这一点,但它需要一些欺骗。

  1. 编写一个使用包含Request对象的ThreadLocal的Valve。
  2. 在阀门链中的AuthenticationValve之前注册阀门。
  3. 在Valve中,将用户的请求填入ThreadLocal,然后调用链。
  4. 在您的自定义Realm中,从ThreadLocal中获取对象。
  5. 在调用链回来之后,请记得从ThreadLocal中删除请求...即使发生异常。
+0

谢谢你的回应,但似乎不工作。我已经用2个具体的附加类覆盖了2个方法RealmBase.authenticate(String userId,String accessToken)和FormAuthenticator.authenticate(Request request,HttpServletResponse response)。有两个不同的问题:1)似乎2种方法使用不同的线程2)在一些调用之后,重用了ThreadId,因此ThreadLocal在线程之间共享,导致信息重叠。 :-(请问你能给我一些例子吗? – 2015-02-03 00:17:40

+0

我不会为你写代码,它只是一个建议什么可以工作。是的,线程被重新使用......这就是为什么我包括步骤#5上面:它会删除应该是私密的信息如果您遇到信息泄漏,这是因为您没有执行上述第5步 – 2015-02-03 20:53:03

+0

如果没有任何东西,认证器阀门会自动添加到Tomcat的阀门链中您需要明确配置您的''内的认证阀,并确保阀链中的*后*与处理ThreadLocal的阀相比*更晚*。 – 2015-02-03 20:54:09