2016-12-01 135 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