Java 如何创建请求安全类或类属性

Java 如何创建请求安全类或类属性,java,Java,我会尽量简短和具体。是否可以为每个请求创建类、类属性或“某物”?我指的是对整个容器来说不会持久的东西(静态类属性) 我需要将内部标识符存储到类或属性中,每个请求的内部标识符是不同的,整个请求的内部标识符是持久的。我正在使用java过滤器,在使用doFilter之前,我需要将该标识符保存在“某处”。因为我需要在应用程序中为某些操作使用该标识符。在doFilter之后,我需要从“某处”获取该标识符,并更新一些其他内容 谢谢你对如何解决这个问题的建议 2011年5月24日上午10:25编辑 好的,我

我会尽量简短和具体。是否可以为每个请求创建类、类属性或“某物”?我指的是对整个容器来说不会持久的东西(静态类属性)

我需要将内部标识符存储到类或属性中,每个请求的内部标识符是不同的,整个请求的内部标识符是持久的。我正在使用java过滤器,在使用doFilter之前,我需要将该标识符保存在“某处”。因为我需要在应用程序中为某些操作使用该标识符。在doFilter之后,我需要从“某处”获取该标识符,并更新一些其他内容

谢谢你对如何解决这个问题的建议


2011年5月24日上午10:25编辑

好的,我会尽力仔细解释我的问题

我将Tomcat6与BlazeDS utils一起使用。此服务器用作flex应用程序的后端。 所以,如果我想向服务器发送一些消息或对象或其他任何东西,我只需调用如下内容:

service.doSomethingWithThis( data )
在flex中,是映射到类的“service”属性,即“foo.bar.BazService”,该服务具有带有参数“data”的方法“doSomethingWithThis”。当服务器接收到请求时,将使用参数“data”执行“doSomethingWithThis”方法

如您所见,我没有访问请求属性的权限。我在Flex端称之为Java端

另一个问题是DAO对象(在本例中为GenericDAO)。这些DAO对象有点特定。他们要求数据库连接,而这个连接是由一个singleton类提供的,它为整个应用程序保存数据库连接。所以,我并没有像往常一样将连接参数传递给DAO对象,而是它们自己要求连接。我知道这不是正确的方法:)

现在我们正试图解决这个问题,我们希望使用Tomcat提供的池数据库连接。这是一个问题。如果我检索连接,我需要将该连接放回池中。但是我的DAO对象没有关闭数据库连接。解决方案可以是在调用服务方法时将连接参数传递给DAO对象,并在最后关闭该连接,但我有很多服务,这需要很多重构。所以我试图找到另一种方法,当我能够封装整个请求(Java过滤器)并将数据库连接存储在“某处”时。我的DAO对象可以从“某处”获取这个连接

在请求中存储数据库连接是一种解决方案,但正如您所看到的,我不知道如何在我的DAO类或服务类中访问此请求。另一种方法是使用会话,但也存在问题。可能有多个对服务器的请求,第一个完成的请求将关闭该连接。所以,其他请求不能再使用该数据库连接,因为它已返回到池中


所以我的目标是解决方案,当我能够为整个请求获得一个数据库连接时。

如果我知道您的请求在不同的线程中执行,您可以将变量存储在
ThreadLocal
变量中,该变量对每个线程(和请求)具有不同的值.

如果您的请求在不同的线程中执行,您可以将变量存储在
ThreadLocal
变量中,该变量对每个线程(和请求)具有不同的值

将在请求的生存期内持续,不再持续


该方法的一个可能缺点是,如果需要在不同的类中检索该值,则需要将对请求对象的引用传递给该类,这可能会使其接口比需要的复杂。或者对象本身(属性值)可以传递给该类或方法。更复杂?可能-但至少显式参数更容易看到发生了什么。同意-我重新阅读了问题,意识到过滤器之间的通信很重要。是的,我也有同样的想法来存储我的对象(标识符)在请求属性中。但是还有一个问题。在我执行的类中,我没有请求参数,并且我没有找到任何直接访问请求属性/对象的解决方案(eq.singleton或类似的东西).说清楚点,我忘了一件小事,我使用Java作为Flex应用程序的后端,我在Blase DS上运行。我认为
doFilter
方法有一个请求参数-它有。你能提供一些关于类的详细信息来解释为什么没有请求对象吗?这种方法的一个可能缺点是如果需要如果要在不同的类中检索,则需要将对请求对象的引用传递给该类,这可能会使其接口比需要的复杂。或者对象本身(属性值)可以传递给该类或方法。更复杂?可能-但至少显式参数更容易看到发生了什么。同意-我重新阅读了问题,意识到过滤器之间的通信很重要。是的,我也有同样的想法来存储我的对象(标识符)在请求属性中。但是还有一个问题。在我执行的类中,我没有请求参数,并且我没有找到任何直接访问请求属性/对象的解决方案(eq.singleton或类似的东西)。说得清楚一点,我忘记了一件小事,我使用Java作为Flex应用程序的后端,我在Blase DS上运行。我认为
doFilter
方法有一个请求参数-它有。你能提供一些关于你的类的详细信息来解释为什么你没有请求对象吗?我将尝试ThreadLocal,我们将看到这种方法是如何工作的。我会让你知道的。我会试试ThreadLocal,我们会看看这个方法是如何工作的。我会让你知道的。
public int doSomethingWithThis( Object data ) {
  GenericDAO genDao = new GenericDao();
  genDao.create( data );
}
request.setAttribute("name", variable);