向Spring控制器添​​加标头

时间:2012-05-15 19:44:32

标签: caching spring-mvc http-headers

我知道这个问题与this非常相似,但我觉得它的不同和具体足以在这里保证自己的问题。

我刚从一位没有留下任何文档的开发人员那里继承了一个Java Web应用程序项目。它是一个具有基本包结构的Spring MVC应用程序,如下所示:

com.ourOrg.app.controllers
    ImageController
    ProgramController
    UserController
com.ourOrg.app.otherPackages

每个Controller类只是一个注释了@Controller@RequestMapping("/blah")的POJO。例如:

@Controller
@RequestMapping("/images")
public class ImageController() {
    @RequestMapping(value="/saveImage", method = RequestMethod.POST)
    @ResponseBody
    public ResponseEntity<String> saveImage(@RequestParam(value="imageData", required=true) String imageXML, HttpServletRequest request){
        // This method gets executed whenever the:
        // http://ourSite.com/images/saveImage
        // URL is hit
    }
}

我被要求将以下HTTP标头添加到Spring配置中,以便我们禁用浏览器缓存:

  

Pragma:no-cache

     

缓存控制:无缓存

     

过期:-1

我上面链接的文章听起来像我们的控制器应该扩展这个WebContentGenerator类。不幸的是,有许多控制器具有大量的方法,因此重构每个控制器来扩展或继承某些基类型并不是一个可行的选择(除非它只有 选项!)。

我也看过一些文章,听起来你必须配置Spring来使用AOP拦截器修改你的响应标题,但现在我真的进入了一个不熟悉的领域。

鉴于我们对Spring MVC的设置和实现,我最简单的方法是将这三个简单的标题添加到服务器发回的每个响应中(无论执行哪个控制器或方法)?

提前致谢!

2 个答案:

答案 0 :(得分:3)

希望你使用的是Spring 3,你可以看一下拦截器,然后你不必修改所有的控制器(因为你说你有很多)。看起来他们可能已经实现了一个你可以使用的实现。查看Bozho对此问题的回答how to set header no cache in spring mvc 3 by annotation

答案 1 :(得分:-1)

我意识到这是一个老帖子,但也许这会对某人有所帮助。我在这个例子中使用spring。主要是使用参数注释 @Controller 公共类HelloController {

@RequestMapping(value = "/hello.htm")
public String hello(@RequestHeader(value="User-Agent") String userAgent)

    //..
}

}