Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Servlet过滤器混乱,响应重定向不为';不可能_Java_Redirect_Httpresponse_Servlet Filters - Fatal编程技术网

Java Servlet过滤器混乱,响应重定向不为';不可能

Java Servlet过滤器混乱,响应重定向不为';不可能,java,redirect,httpresponse,servlet-filters,Java,Redirect,Httpresponse,Servlet Filters,我有一个身份验证过滤器,用于阻止用户浏览您需要登录的任何页面: public class AuthenticationFilter implements Filter { private FilterConfig fc; private final String indexURL = "/index.xhtml"; private final String registerUrl = "/register/register.xhtml"; @Override

我有一个身份验证过滤器,用于阻止用户浏览您需要登录的任何页面:

public class AuthenticationFilter implements Filter {

    private FilterConfig fc;
    private final String indexURL = "/index.xhtml";
    private final String registerUrl = "/register/register.xhtml";

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.fc = filterConfig;
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse resp = (HttpServletResponse) response;
        HttpSession session = req.getSession();
        UserBean user = (UserBean) session.getAttribute("userBean");
        String requestUrl = req.getRequestURI();
        System.out.println("user is " + user);
        if (user != null) {
            System.out.println("username is " + user.getUsername());
            if (user.getUsername() == null || user.getUsername().equalsIgnoreCase("")) {
                System.out.println("request url is " + requestUrl);
                if (!requestUrl.equalsIgnoreCase(indexURL) && 
                        !requestUrl.equalsIgnoreCase(registerUrl) && !requestUrl.startsWith("/javax.faces.resource")) {
                    //Redirect back to indexpage
                    System.out.println("request url is not for index/register/resource, it is: " + requestUrl);
                    resp.sendRedirect(indexURL);
                };
            }
        } else {
            resp.sendRedirect(indexURL);
        }
        chain.doFilter(req, resp);
    }

    @Override
    public void destroy() {

    }

}
它实际上正在打印我期望的内容,但它没有执行重定向,这是我的日志信息(最后一部分):

Info:   request url is /javax.faces.resource/jquery/jquery.js.xhtml
Info:   user is be.kdg.repaircafe.beans.UserBean@350af1bb
Info:   username is null
Info:   request url is /javax.faces.resource/repaircafe_logo.png.xhtml
Info:   user is be.kdg.repaircafe.beans.UserBean@350af1bb
Info:   username is null
Info:   request url is /welcome.xhtml
Info:   request url is not for index/register/resource, it is: /welcome.xhtml
Severe:   Error Rendering View[/welcome.xhtml] --> I just told you to redirect! Why are you doing this to me??

编辑:经过一些调试后,我发现调试器点击了链。doFilter()即使在他重定向响应后,为什么他仍然将我转发给欢迎而不是索引?

我通过查看另一个stackoverflow答案来修复此问题,如果我在重定向后点击return,它将阻止过滤器进行转发


是调试指针正在分别命中sendRedirect(indexURL)的代码?如果
requestUrl
indexURL
是相同的,我不认为它会进入if。如果重定向,则不应调用chain.doFilter(req,resp);紧接着。当页面是受欢迎的时,过滤器似乎在循环中被击中。xhtml。是的,调试指针击中了重定向。如果您阅读了注释,您会很快发现:如果您重定向,您不应该调用chain.doFilter(req,resp);就在我读了评论之后,但你没有提供我为什么不能这么做的依据。这似乎更多的是一种预感,而不是事实。