在Pojo / Restful Service中访问会话数据

时间:2014-08-01 16:43:45

标签: java rest session global

我要求在现有系统中的每个日志语句中包含一个用户的id非常大。用户的信息当前存储在HttpSesssion中,我可以从我们的sevlet中的HttpRequest轻松获取。但是我将在所有其他被调用的POJO中都需要这些信息。

我可以传递这些信息,但我不愿意,因为我不想修改系统中每个方法的签名,因为这需要太长时间并且需要太多测试。

此外,我在调用Restful Service时需要用户的id。我可以轻松地在每个请求上传递该ID,但是再次执行此操作的工作量是不可取的。

存储/接收此类“全球”信息的最佳做法是什么?我希望这些信息可以通过我们的身份验证逻辑设置一次,然后可以从JVM中的任何其他类(servlet,pojo,service等)访问,包括跨Java应用程序(.war)。

这可能吗?

感谢。

1 个答案:

答案 0 :(得分:1)

您可以将用户信息存储在ThreadLocal中。其中一种方法是创建一个ServletFilter,它将用户信息保存到ThreadLocal并在请求处理完成后将其删除(非常重要!)。然后,所有需要用户信息的方法都会从ThreadLocal变量中读取它。

要在不更改所有代码的情况下为每个Restful Service传递用户ID,您需要某种Interceptor。如果您使用的是spring,那么实现ClientHttpRequestInterceptor将是您的最佳选择。