Servlets Servlet筛选器登录重定向无限循环

Servlets Servlet筛选器登录重定向无限循环,servlets,login,infinite-loop,servlet-filters,Servlets,Login,Infinite Loop,Servlet Filters,我正在试验servlet过滤器。我已经创建了两个JSP页面——主页和登录。 我要创建以下流: 在会话->重定向到登录页面时,在没有凭据的情况下访问主页 输入正确的凭据(与硬编码常量进行比较)时,重定向到主页 输入错误凭证时-再次重定向到登录页面 这是到目前为止我的代码,由于空检查,我在直接进入主页时遇到了无限循环的问题。在这种情况下,你能告诉我正确的方法吗 package bg.filter.test; import java.io.IOException; import javax.serv

我正在试验servlet过滤器。我已经创建了两个JSP页面——主页和登录。 我要创建以下流:

在会话->重定向到登录页面时,在没有凭据的情况下访问主页

输入正确的凭据(与硬编码常量进行比较)时,重定向到主页

输入错误凭证时-再次重定向到登录页面

这是到目前为止我的代码,由于空检查,我在直接进入主页时遇到了无限循环的问题。在这种情况下,你能告诉我正确的方法吗

package bg.filter.test;

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 ("/pages/*")
public class LoginFilter implements Filter {

    private static final String name = "admin";
    private static final String pass = "123";

    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

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

        String name = request.getParameter("username");
        String pass = request.getParameter("password");

        if (name != null && pass != null) {
            if (LoginFilter.name.equals(name) && LoginFilter.pass.equals(pass)) {
                ((HttpServletRequest) request).getSession().setAttribute("username", name);
                ((HttpServletRequest) request).getSession().setAttribute("password", pass);

                ((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Home.jsp");
            } else {
                ((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Login.jsp");
            }
        } else {
            name = (String)((HttpServletRequest) request).getSession().getAttribute("username");

            if(name == null) {
                ((HttpServletResponse) response).sendRedirect("/FilterLoginTest/pages/Login.jsp");
            }
        }
        chain.doFilter(request, response);
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {
        // TODO Auto-generated method stub

    }

}

我不知道你为什么要这样实施

看看JAAS

此外,如果您需要实现此筛选器,登录后将用户对象放入会话中是一种常见行为,仅筛选器将针对null对其进行测试, 如果是关于授权的,您将对照预定义的角色列表检查url,以传递请求或重定向到未经授权的页面