2012-05-25 39 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

相關問題