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

时间:2011-05-20 15:05:33

标签: java

我会尽量做到简短而且最具体。可以创建为每个请求创建的类,类属性或“东西”吗?我的意思是对整个容器(静态类属性)不会持久的东西。

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

感谢您提出如何解决此问题的任何建议......


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

好的,我会尽力解释我的问题。

我正在使用Tomcat 6和BlazeDS utils。此服务器用作Flex应用程序的后端。 所以,如果我想向服务器发送一些消息或对象或其他任何东西,我只需要这样调用:

service.doSomethingWithThis( data )

在flex中,“service”属性映射到class,eq。 “foo.bar.BazService”和此服务的方法“doSomethingWithThis”带有参数“data”。当服务器收到请求时,使用参数“data”执行“doSomethingWithThis”方法。

public int doSomethingWithThis( Object data ) {
  GenericDAO genDao = new GenericDao();
  genDao.create( data );
}

因此,正如您所看到的,我无法访问请求属性。我在Flex方面称之为在Java端调用它。

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

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

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

request.setAttribute("name", variable);

将在请求的生命周期内持续存在,而不再存在。