Бесконечный цикл перенаправления входа в систему Servlet Filter

Я экспериментирую с фильтрами сервлетов. Я создал две страницы JSP - Home и Login. Я хочу создать следующий поток:

При доступе к домашней странице без учетных данных в сеансе -> перенаправить на страницу входа.

При вводе правильных учетных данных (сравните их с жестко заданными константами) перенаправляйте на домашнюю страницу.

При вводе неправильных учетных данных - снова перенаправить на страницу входа.

Вот мой код на данный момент, у меня проблема с бесконечным циклом при прямом входе на домашнюю страницу из-за нулевых проверок. Подскажите, пожалуйста, как правильно поступить в данной ситуации.

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

    }

}

person Антон Георгиев    schedule 10.02.2016    source источник


Ответы (1)


Интересно, почему вы хотите реализовать это так,

Взгляните на JAAS JAAS для людей

Кроме того, если вам нужно реализовать этот фильтр, после входа в систему обычным поведением является размещение объекта пользователя, например, в сеансе, и только фильтр будет проверять его на значение null, если речь идет об авторизации, вы проверяете URL-адрес, например, по заранее определенному списку. ролей для передачи запроса или перенаправления на неавторизованную страницу

person emad omara    schedule 11.02.2016