Java Spring MVC中的ResponseBody

Java Spring MVC中的ResponseBody,java,spring,model-view-controller,Java,Spring,Model View Controller,我有一个Spring MVC控制器,它生成某种字节响应,直接写入响应Outputstream。对于这种情况,我需要一个具有此签名的控制器 @BodyResponse @AuthorizedMethod(...) public void createPdf() { // doSomething on response } @AuthorizedMethod(...) public ModelAndView createPdf() { return new ModelAndView("lo

我有一个Spring MVC控制器,它生成某种字节响应,直接写入响应Outputstream。对于这种情况,我需要一个具有此签名的控制器

@BodyResponse
@AuthorizedMethod(...)
public void createPdf() {
  // doSomething on response
}
@AuthorizedMethod(...)
public ModelAndView createPdf() {
  return new ModelAndView("login.jsp");
}
但当用户未经授权时,我想向他显示登录表单。所以我需要这样一个方法签名

@BodyResponse
@AuthorizedMethod(...)
public void createPdf() {
  // doSomething on response
}
@AuthorizedMethod(...)
public ModelAndView createPdf() {
  return new ModelAndView("login.jsp");
}
我该怎么办

问候,,
Michael

对于安全检查的特定情况,通常安全框架会自动处理重定向,除非您进行某种“升级”登录

对于您问题的一般情况: HandlerAdapter中有一个特殊的陷阱,如果读取响应并为ModelAndView返回null,则会禁用视图分辨率

这意味着,如果您只是将HttpServletResponse作为一个方法参数,自己编写字节,然后返回null,Spring将不采取进一步的操作并提交响应


然后,如果您不想写入字节,而是想返回一个视图,只需返回一个ModelAndView作为正常值。

您使用的是Spring安全性吗?如果是这样,Spring Security filter将在处理到达您的控制器之前重定向未经授权的用户。不,不使用Spring mvc,我想直接在受保护的方法(=>controller)上声明安全方面,而不是在某些配置中