使用Struts2一次下载一次

时间:2012-11-09 22:35:15

标签: java struts2

我有一个Struts2 Action,它使用StreamResult来传输文件。该文件是一个非常大的报告。我想设置一个标志,一次限制用户下载一次。在我的Action中,我可以设置标志,但是在流完成时我没有地方取消它。

在Struts之前,我会设置标志,写入Servlet的OutputStream,然后取消设置标志。但是使用Struts,Action只是将流设置为变量,然后Action完成。 Struts(在struts.xml中设置)然后在我无法控制的地方进行发送。

2 个答案:

答案 0 :(得分:1)

我认为您应该创建一个包含此下载操作的拦截器,它可以锁定/解锁当前用户的访问权限。有关详细信息,请参阅http://struts.apache.org/2.x/docs/interceptors.html

答案 1 :(得分:1)

在类close中尝试覆盖FileInputStream函数,这里是FileInputStream API的文档,如果您正在使用其他类型的“输入流”,则只需扩展它并覆盖{{ 1}}方法。

试试这段代码:

close

在您的操作类中:

public class YourInputStream extends FileInputStream {
    @Override
    public void close() throws IOException{
        super.close();
        // here unset your flag
    }
}