简体   繁体   English

该页面在Servlet /过滤器中无法正确重定向

[英]The page isn't redirecting properly in Servlet/Filter

I am new to Servlet and Filter. 我是Servlet和Filter的新手。 I am trying to block all users that is not logged-in in my application. 我试图阻止所有未在我的应用程序中登录的用户。

Web.xml file Web.xml文件

<filter>
        <filter-name>UserFilter</filter-name>
        <filter-class>user.UserFilter</filter-class>

    <init-param>
        <param-name>avoid-urls</param-name>
        <param-value>index.jsp, SelectDb.jsp, login.jsp</param-value>
    </init-param>

    </filter>
    <filter-mapping>
    <filter-name>UserFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

The Filter Class 过滤器类

package user;

import java.io.IOException;
import java.util.ArrayList;
import java.util.StringTokenizer;
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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;


public class UserFilter implements Filter {

    private ArrayList<String> urlList;

    public UserFilter() {
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain)
            throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;

        String url = request.getServletPath();
        String contextPath = request.getContextPath();
        boolean allowedRequest = false;

        for (String urlList1 : urlList) {
            if (url.contains(urlList1)) {
                allowedRequest = true;
                break;
            }
        }
        if (!allowedRequest) {
            HttpSession session = request.getSession();
            if (null == session) {
                response.sendRedirect("");
            } else {
                String logged = (String) session.getAttribute("username");
                if (logged == null) {
                    response.sendRedirect(request.getContextPath() + "/dashboard/SelectDb.jsp");
                } else {
                    chain.doFilter(request, response);
                }
            }
        } else {
            chain.doFilter(request, response);
        }

    }

    @Override
    public void destroy() {
    }

    @Override
    public void init(FilterConfig config) {
        String urls = config.getInitParameter("avoid-urls");
        StringTokenizer token = new StringTokenizer(urls, ",");
        urlList = new ArrayList<>();
        while (token.hasMoreTokens()) {
            urlList.add(token.nextToken());
        }
    }

}

I can see that the page is redirecting properly to the page I want to redirect. 我可以看到页面正在正确重定向到我要重定向的页面。 The Url is changing. 网址正在更改。 But the Firefox says that the page is not redirecting properly. 但是Firefox表示页面无法正确重定向。 The Message is somewhat like this: Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies 该消息有点像这样: Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies . Firefox has detected that the server is redirecting the request for this address in a way that will never complete. This problem can sometimes be caused by disabling or refusing to accept cookies I do not think that this error is from the browser itself. 我认为此错误不是来自浏览器本身。 Because I've tried other browser also. 因为我也尝试过其他浏览器。 Why this error ? 为什么会出现这个错误? How can Solve this error ? 如何解决此错误?

Try replacing 尝试更换

HttpSession session = request.getSession();

to

HttpSession session = request.getSession(false);

request.getSession() will create a new session if there is no session yet, so it will never return null, thus the user is redirected to the selectDb url where he has !allowedRequest and its enters and infinite redirection 如果没有会话,则request.getSession()将创建一个新会话,因此它将永远不会返回null,因此,用户将被重定向到他具有!allowedRequest及其进入和无限重定向的selectDb url !allowedRequest

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM