2016-12-01 133 views
2

我有一個類實現了javax.servlet.Filter,它對會話中設置的令牌對象進行了一些驗證,如果令牌變得無效我希望返回403禁止響應。所以,我有類似在Servlet過濾器中設置響應代碼

@Override 
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throw ServletException { 
    HttpServletRequest request = (HttpServletRequest) req; 
    HttpServletResponse response = (HttpServletResponse) res; 
    ... 
    ... 
    // Something has gone wrong with auth set the response code and 
    // continue with the chain 
    response.setStatus(403); 
    chain.doFilter(request, response); 
} 

我想接着發生的是在web.xml中定義觸發對403響應代碼<error-page>

<error-page> 
    <error-code>403</error-code> 
    <location>/forbidden.xhtml</location> 
</error-page> 

我可以看到網絡選項卡瀏覽器開發工具正確顯示403類型的響應。但瀏覽器不會像我期待的那樣重定向到錯誤頁面,我在這裏做錯了什麼?

回答

8

我的錯誤是在做什麼response.setStatus(403)需要發生是

response.sendError(403); 
return; 
+0

這個工作對我非常好,我使用自定義錯誤消息發送回一個響應到UI。 \t \t \t \t \t 趕上(例外五){ log.error(的String.format( 「異常發生在令牌驗證:%s」 時,e.getMessage())); ((HttpServletResponse)響應).sendError(401,AuthzError.INVALIDAUTHTOKEN.getDescription()); \t return; } \t \t \t \t \t \t \t \t \t} – Sindhu