1

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

@BodyResponse
@AuthorizedMethod(...)
public void createPdf() {
  // doSomething on response
}

但是当用户未被授权时,我想向他展示登录表单。所以我需要这样的方法签名

@AuthorizedMethod(...)
public ModelAndView createPdf() {
  return new ModelAndView("login.jsp");
}

我该如何处理?

问候,迈克尔

4

1 回答 1

2

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

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

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

然后,如果您不想写入字节而想返回视图,则只需正常返回 ModelAndView 即可。

于 2012-05-25T07:48:17.670 回答