未从筛选页面

时间:2016-07-23 10:55:20

标签: jsf jsf-2 primefaces servlet-filters httpsession

我有一个包含p:commandLink的页面,它在会话范围的辅助bean上调用一个非常简单的方法。 backing bean方法只是将消息记录到控制台并重定向到欢迎页面。

运行时,链接不执行任何操作。 h:消息中没有报告错误,服务器控制台上没有堆栈跟踪。但是,如果我在另一个页面上使用完全相同的代码,那么该链接可以正常工作。

页面之间的主要区别在于包含“死”链接的页面受登录过滤器保护(页面位于“受限”文件夹中),而包含“工作”链接的页面不在限制文件夹。

我已经在其他几个主题中听过关于不起作用的动作链接的建议。我没有嵌套表单或渲染问题等。我想知道登录过滤器是否可能对链接产生一些影响。

这是包含不起作用的链接的页面(它位于location:restricted / secret.xhtml)。我故意将内容最小化以消除其他潜在原因。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml"
    xmlns:h="http://java.sun.com/jsf/html"
    xmlns:f="http://java.sun.com/jsf/core"
    xmlns:p="http://primefaces.org/ui">

    <h:head>
        <title>Restricted Page</title>
    </h:head>

    <h:body>
        <h:form>
            <h:messages />

            <br/>
            <p:commandLink action="#{loginBean.testMethod}" value="Test" />
        </h:form>
    </h:body>
</html>

这是支持bean中的方法(如果在不受保护的页面上使用完全相同的commandLink代码调用,它将起作用:

public String testMethod() {
    logger.info("xxxxxxxxxxxxxx Test method called xxxxxxxxxxxxxx");
    return("WelcomeMember.xhtml");
}

登录过滤器如下:

package com.mymato.coop;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebFilter("/restricted/*")
public class AuthenticationFilter implements Filter {

      @SuppressWarnings("unused")
      private FilterConfig config;

      public void doFilter(ServletRequest req, ServletResponse resp,
          FilterChain chain) throws IOException, ServletException {
        if (((HttpServletRequest) req).getSession().getAttribute(
            LoginBean.AUTH_KEY) == null) {
          ((HttpServletResponse) resp).sendRedirect("../login.xhtml");
        } else {
          chain.doFilter(req, resp);
        }
      }

      public void init(FilterConfig config) throws ServletException {
        this.config = config;
      }

      public void destroy() {
        config = null;
      }
}

为了将来参考,是否有一种调试此类问题的好方法?我现在已经遇到了几次死链接问题。它很难解决,因为它无声地失败了。至少如果有错误消息那么这将是一个线索。

0 个答案:

没有答案