在Primefaces操作上设置标题引荐来源网址

时间:2018-08-17 14:50:17

标签: jsf primefaces csrf

这是上一个问题的后续解答:Error using JSF protected views when opening a new tab

我正在使用受faces-config保护的视图来防御CSRF。较早时,我遇到了问题,我在新标签页中打开了链接,并通过添加

解决了该问题
rel="noopener noreferrer"

所有新标签页链接。

但是现在我遇到了与commandButtons相同的问题。

我有

        <p:commandButton value="Submit" 
            action="#{bean.submit}" />

然后commit()返回带有新视图的字符串。但是我仍然收到以下错误:

javax.faces.application.ProtectedViewException: JSF1099: Referer [sic] header value http://.../updatestatus.xhtml?javax.faces.Token=1534516398157&cr=45309 does not appear to be a protected view. Preventing display of viewId /finance/commitmentregister/view.xhtml
at com.sun.faces.lifecycle.RestoreViewPhase.maybeTakeProtectedViewAction(Unknown Source)

有没有办法在Primefaces命令按钮上不设置引用或打开工具?

编辑:

也许不是我要找的答案,但是我通过在过滤器中添加servlet请求包装器来解决该问题,当请求引荐来源时返回null。

进一步编辑:

使用包装程序修复程序添加我的代码的大致轮廓:

@WebFilter(filterName = "UserLoginFilter", urlPatterns = { "*.xhtml" })
public class UserLoginFilter implements Filter {

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException {

    HttpServletRequestWrapper wrapper = new HttpServletRequestWrapper(httpServletRequest) {
        @Override
        public String getHeader(String name) {
            if (name.equalsIgnoreCase("referer")) {
                return null;
            } else {
                return super.getHeader(name);
            }
        }
    };

    chain.doFilter(wrapper, response);
}

}

0 个答案:

没有答案