Во-первых, я рекомендую не вызывать FacesContext в EJB, потому что FacesContext является элементом «View Layer».Цель EJB - представить «слой логики бизнеса», и лучшая практика состоит в том, чтобы изолировать бизнес-логику от de View, потому что вы можете получить доступ к логике бизнеса из многих типов представлений.
О том, как закрытьсеанс, я предлагаю сделать следующее:
Создать сервлет и реализовать метод doGet, чтобы закрыть сеанс следующим образом:
@WebServlet("/logout")
public class LogoutServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException {
HttpSession session= req.getSession();
session.invalidate();
RequestDispatcher rd = req.getRequestDispatcher("/login.xhtml"); //The url where go after logout
rd.forward(req,res);
}
}
Таким образом, вы можете добавить следующую ссылку в васhtml / xhtml страницы для выхода из системы:
<a href="/logout">Logout</a>
Если вы используете JSF, для получения пути к контексту своего приложения вы можете использовать:
<a href="${request.contextPath}/logout">Logout</a>
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я предполагаючто вы используете Java EE 6. Также я не тестировал код (но я знаю, что он работает), если у вас есть проблемы с компиляцией, пожалуйста, сообщите мне