Я понимаю, что вы проверяете присутствие вошедшего в систему пользователя перед отображением контента.Это может быть в порядке, но любой пользователь, который откроет страницу без входа в систему, получит пустой контент.Это не очень удобно для пользователя.Вы хотите перенаправить незарегистрированного пользователя на страницу входа.
Обычно это уже учитывается, если вы используете управляемую контейнером аутентификацию Java EE.Но если вы используете домашнюю аутентификацию, для этого вам нужно создать фильтр сервлетов .Если вы соберете все запрещенные страницы в общей папке, например /app
, чтобы вы могли использовать общий шаблон URL для фильтра, например, /app/*
(и разместите все общедоступные страницы, такие как страница входа , за пределами ,папку), тогда вы сможете отфильтровать незарегистрированных пользователей следующим образом, предполагая, что #{userBean}
является JSF @ManagedBean
области сеанса или каким-либо атрибутом сеанса, который вы сами поместили в область сеанса:
@WebFilter("/app/*")
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig config) throws ServletException {
// NOOP.
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession(false);
UserBean user = (session != null) ? (UserBean) session.getAttribute("userBean") : null;
if (user == null || user.getCognome() == null) {
response.sendRedirect(request.getContextPath() + "/login.xhtml"); // No logged-in user found, so redirect to login page.
} else {
chain.doFilter(req, res); // Logged-in user found, so just continue request.
}
}
@Override
public void destroy() {
// NOOP.
}
}
См. Также: