Я проверяю состояние входа пользователя (разрешения) и хочу перенаправить его на другую страницу, если у него нет правильных разрешений для посещения определенной страницы .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 от беспорядочных копий и обходных путей, предотвращая принятие ответа перед перенаправлением.