Бесконечный цикл перенаправления входа в систему 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)


arrow_upward
0
arrow_downward

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

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

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

person emad omara    schedule 11.02.2016