我要求在现有系统中的每个日志语句中包含一个用户的id非常大。用户的信息当前存储在HttpSesssion中,我可以从我们的sevlet中的HttpRequest轻松获取。但是我将在所有其他被调用的POJO中都需要这些信息。
我可以传递这些信息,但我不愿意,因为我不想修改系统中每个方法的签名,因为这需要太长时间并且需要太多测试。
此外,我在调用Restful Service时需要用户的id。我可以轻松地在每个请求上传递该ID,但是再次执行此操作的工作量是不可取的。
存储/接收此类“全球”信息的最佳做法是什么?我希望这些信息可以通过我们的身份验证逻辑设置一次,然后可以从JVM中的任何其他类(servlet,pojo,service等)访问,包括跨Java应用程序(.war)。
这可能吗?
感谢。
答案 0 :(得分:1)
您可以将用户信息存储在ThreadLocal中。其中一种方法是创建一个ServletFilter,它将用户信息保存到ThreadLocal并在请求处理完成后将其删除(非常重要!)。然后,所有需要用户信息的方法都会从ThreadLocal变量中读取它。
要在不更改所有代码的情况下为每个Restful Service传递用户ID,您需要某种Interceptor。如果您使用的是spring,那么实现ClientHttpRequestInterceptor将是您的最佳选择。