У меня проблема с моими лицами:
Я ограничил навигационную часть, которая отображает информацию для входа о текущем пользователе и кнопку выхода из системы. Логин работает правильно. Но после того, как пользователь вышел из системы, на навигационной части моей страницы отображается
Welcome, User (role) [Logout_Button]
Принимая во внимание, что то, что я хочу, это то же самое, что происходит при первом входе в систему:
Welcome, Guest
(Спасибо, Java-пьяница за эти простые слова: -))
Здесь вы можете увидеть часть моего шаблона:
<div id="metaContainer">
<ui:include src="/metaMenu.xhtml" />
</div>
Это моя часть навигации с информацией для входа в систему (называется metaMenu.xhtml):
<ui:composition xmlns="http://www.w3.org/1999/xhtml" lang="en"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:ui="http://java.sun.com/jsf/facelets"
xmlns:f="http://java.sun.com/jsf/core">
<div id="login_info">
<h:outputLabel value="Willkommen, "/>
<h:outputLabel class="principal" value="#{metaNavData.principal}"/>
<h:outputLabel value="#{metaNavData.role}"/>
</div>
<div id="meta_nav">
<h:form name="loginform" rendered="#{authorisation.authenticated}">
<h:commandLink action="#{loginController.logout}" rendered="#{authorisation.authenticated}">
Logout</h:commandLink>
</h:form>
</div>
</ui:composition>
Как предположили BalusC и Java Drinker, это может быть проблемой с Java-логикой. Сначала я должен сказать, что я использую Apache Shiro для обеспечения безопасности. Итак, вот соответствующий код Java:
мой loginController, который содержит метод выхода из системы:
@ManagedBean
@SessionScoped //Mistake!!! That should be RequestScoped, see below
public class LoginController {
private Subject currentUser; // import org.apache.shiro.subject.*;
public LoginController() {
currentUser = SecurityUtils.getSubject();
}
public String logout() {
if (currentUser.isAuthenticated()) {
currentUser.logout();
}
return "welcome.xhtml";
}
И на ней вы можете увидеть мое авторизованное bean-компонент «авторизация» , который должен предоставить информацию, которая может быть использована для скрытия таких компонентов, как кнопка входа в систему:
@ManagedBean
@RequestScoped
public class Authorisation {
private Subject currentUser;
public Authorisation(){
currentUser = SecurityUtils.getSubject();
}
public boolean getAuthenticated(){
return currentUser.isAuthenticated();
}