2012-05-25 37 views
1

我有一个Spring MVC控制器,它生成一些某种类型的Byte-Response,它直接写入Response-OutputStream。对于这种情况,我需要一个控制器与此签名Spring MVC中的ResponseBody

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

但是,当用户无权我想告诉他登录表格。所以我需要这样的方法签名

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

我该如何处理?

问候, 迈克尔

+1

你在使用Spring Security吗?如果是这样,Spring Security过滤器会在处理之前将未经授权的用户重定向到您的控制器。 –

+0

不,不使用弹簧mvc,我想直接在安全方面(=>控制器)声明安全方面,而不是在某些配置 – mibutec

回答

2

对于安全检查的具体情况,通常是安全框架将自动处理做了重定向那里,除非你做像某种“升级”登录。

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

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

然后在您不想写入字节而是想返回视图的情况下,只需返回一个ModelAndView即可。

+0

工作正常,谢谢 – mibutec

相关问题