Безопасно ли перенаправлять браузер пользователя с помощью c: redirect? - PullRequest
1 голос
/ 03 февраля 2012

Я проверяю состояние входа пользователя (разрешения) и хочу перенаправить его на другую страницу, если у него нет правильных разрешений для посещения определенной страницы .jsp.

Этобезопасно использовать

<c:redirect> 

от JSTL?Будет ли пользователь перенаправлен на 100% или он может получить html-вывод моей jsp-страницы?

В php, чтобы быть уверенным, я бы поместил exit ();после перенаправления заголовка.Однако, поскольку я использую MVC с asp и сервлетами, я не хочу размещать Java внутри своих страниц .jsp.

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Я проверяю состояние входа пользователя (разрешения) и хочу перенаправить его на другую страницу, если у него нет правильных разрешений для посещения определенной страницы .jsp.

Канонический подход заключается в использовании сервлета Filter для этого. Вам необходимо сгруппировать эти запрещенные страницы по общему шаблону URL, например, /app/*, /secured/*, /private/* или что-то еще, а затем сопоставьте Filter именно с тем шаблоном URL, который примерно соответствует следующему в методе doFilter() (при условии, что вы сохраняете зарегистрированного пользователя в сеанс обычным способом).

@WebFilter("/app/*")
public class AuthenticationFilter implements Filter {

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

        if (req.getSession().getAttribute("user") != null) {
            // User is logged in, so just continue request.
            chain.doFilter(request, response);
        } else {
            // User is not logged in, so redirect to some index/login page.
            res.sendRedirect(req.getContextPath() + "/login.jsp");
        }
    }

    // ...    
}

Это освобождает JSP от беспорядочных копий и обходных путей, предотвращая принятие ответа перед перенаправлением.

1 голос
/ 03 февраля 2012

Если вы используете MVC, перенаправление не должно выполняться в JSP с JSTL. Не то чтобы это не сработало, но только представление не несет ответственность за перенаправление. Это ответственность контроллера.

Перенаправление из JSP может завершиться ошибкой, если некоторая часть ответа уже сброшена.

Сделайте это в сервлете контроллера, используя response.sendRedirect().

0 голосов
/ 03 февраля 2012

Если вы делаете перенаправление, пользователь может видеть вывод HTML, если вы печатаете.Лучшим подходом может быть использование пересылки, когда пользователь не сможет увидеть какие-либо выходные данные.

...