From a8e8fe82a73f8ae94b22e994e04845228409d51a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Thu, 9 Jun 2016 18:07:17 +0200 Subject: [PATCH] Continued with generic logout (please cherry-pick this): - _FOO changed to _LOGOUT - missing i18n strings set - added form so the user can still decide to logout or go back - added observer method afterUserLogout() which clears the localization bean - added controller method doLogout() which will do the job MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../PizzaLocalizationSessionBean.java | 37 +++++++++++++++ .../PizzaLocalizationSessionController.java | 8 ++++ .../login/PizzaUserLoginWebSessionBean.java | 45 ++++++++++++++++++- .../PizzaUserLoginWebSessionController.java | 7 +++ web/logout.xhtml | 22 +++++++-- 5 files changed, 115 insertions(+), 4 deletions(-) diff --git a/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionBean.java b/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionBean.java index 587435aa..4afeee99 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionBean.java @@ -24,6 +24,7 @@ import javax.enterprise.event.Observes; import javax.faces.context.FacesContext; import javax.inject.Named; import org.mxchange.jusercore.events.login.UserLoggedInEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; import org.mxchange.pizzaapplication.beans.BasePizzaController; /** @@ -75,6 +76,33 @@ public class PizzaLocalizationSessionBean extends BasePizzaController implements //* NOISY-DEBUG: */ System.out.println("LandingLocalizationSessionBean:afterUserLogin - EXIT!"); //NOI18N } + @Override + public void afterUserLogout (@Observes final ObserveableUserLogoutEvent event) { + // Trace message + //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("ReportsLocalizationSessionBean:afterUserLogin: event={0} - CALLED!", event)); //NOI18N + + // event should not be null + if (null == event) { + // Throw NPE + throw new NullPointerException("event is null"); //NOI18N + } else if (event.getLoggedOutUser() == null) { + // Throw NPE again + throw new NullPointerException("event.loggedOutUser is null"); //NOI18N + } else if (event.getLoggedOutUser().getUserId() == null) { + // userId is null + throw new NullPointerException("event.loggedOutUser.userId is null"); //NOI18N + } else if (event.getLoggedOutUser().getUserId() < 1) { + // Not avalid id + throw new IllegalArgumentException(MessageFormat.format("userId of user={0} is not valid: {1}", event.getLoggedOutUser(), event.getLoggedOutUser().getUserId())); //NOI18N + } + + // Clear this bean as well + this.clear(); + + // Trace message + //* NOISY-DEBUG: */ System.out.println("ReportsLocalizationSessionBean:afterUserLogin - EXIT!"); //NOI18N + } + @Override public String getLanguage () { //* NOISY-DEBUG: */ System.out.println(MessageFormat.format("PizzaLocalizationSessionBean::getLanguage(): locale.language={0} - EXIT!", this.getLocale().getLanguage())); //NOI18N @@ -154,4 +182,13 @@ public class PizzaLocalizationSessionBean extends BasePizzaController implements //* NOISY-DEBUG: */ System.out.println("PizzaLocalizationSessionBean::init: EXIT!"); //NOI18N } + /** + * Clears this bean + */ + private void clear () { + // Clear all fields + this.setLanguage(null); + this.setLocale(null); + } + } diff --git a/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionController.java b/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionController.java index 7dbb017e..24bd56cb 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/localization/PizzaLocalizationSessionController.java @@ -19,6 +19,7 @@ package org.mxchange.pizzaapplication.beans.localization; import java.io.Serializable; import java.util.Locale; import org.mxchange.jusercore.events.login.UserLoggedInEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; /** * An interface for localization change beans @@ -34,6 +35,13 @@ public interface PizzaLocalizationSessionController extends Serializable { */ void afterUserLogin (final UserLoggedInEvent event); + /** + * Event observer for logged-out user + *

+ * @param event Event instance + */ + void afterUserLogout (final ObserveableUserLogoutEvent event); + /** * Getter for locale *

diff --git a/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionBean.java b/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionBean.java index f3df1d72..cfe2d7da 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionBean.java +++ b/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionBean.java @@ -31,6 +31,8 @@ import org.mxchange.jusercore.container.login.LoginContainer; import org.mxchange.jusercore.container.login.UserLoginContainer; import org.mxchange.jusercore.events.login.UserLoggedInEvent; import org.mxchange.jusercore.events.login.UserLoginEvent; +import org.mxchange.jusercore.events.logout.ObserveableUserLogoutEvent; +import org.mxchange.jusercore.events.logout.UserLogoutEvent; import org.mxchange.jusercore.exceptions.UserNotFoundException; import org.mxchange.jusercore.exceptions.UserPasswordMismatchException; import org.mxchange.jusercore.exceptions.UserStatusLockedException; @@ -106,6 +108,20 @@ public class PizzaUserLoginWebSessionBean extends BasePizzaController implements */ private boolean userLoggedIn; + /** + * Event fired when user has logged in + */ + @Inject + @Any + private Event userLoginEvent; + + /** + * Event fired when user has logged out + */ + @Inject + @Any + private Event userLogoutEvent; + /** * Default constructor */ @@ -162,7 +178,10 @@ public class PizzaUserLoginWebSessionBean extends BasePizzaController implements this.setBaseTemplatePathName(USER_BASE_TEMPLATE_NAME); //NOI18N // Fire event away. Keep this last before return statement. - this.loginEvent.fire(new UserLoginEvent(confirmedUser)); + this.userLoginEvent.fire(new UserLoginEvent(confirmedUser)); + + // Clear this bean + this.clear(); // All fine return "login"; //NOI18N @@ -177,6 +196,21 @@ public class PizzaUserLoginWebSessionBean extends BasePizzaController implements this.baseTemplatePathName = baseTemplatePathName; } + @Override + public String doUserLogout () { + // Fire event + this.userLogoutEvent.fire(new UserLogoutEvent(this.getLoggedInUser())); + + // Invalidate session + FacesContext.getCurrentInstance().getExternalContext().invalidateSession(); + + // Unset any user instances + this.setLoggedInUser(null); + + // Redirect to index + return "index?faces-redirect=true"; //NOI18N + } + @Override public String getCurrentPassword () { return this.currentPassword; @@ -240,4 +274,13 @@ public class PizzaUserLoginWebSessionBean extends BasePizzaController implements // Return it return this.userLoggedIn; } + + /** + * Clears this bean + */ + private void clear () { + // Clear all fields + this.setCurrentPassword(null); + } + } diff --git a/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionController.java b/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionController.java index 6164051a..f5a841f4 100644 --- a/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionController.java +++ b/src/java/org/mxchange/pizzaapplication/beans/login/PizzaUserLoginWebSessionController.java @@ -47,6 +47,13 @@ public interface PizzaUserLoginWebSessionController extends Serializable { */ String doLogin (); + /** + * Logout for current user by invalidating the current session. + *

+ * @return Outcome (should be redirected) + */ + String doLogout (); + /** * Getter for logged-in user instance *

diff --git a/web/logout.xhtml b/web/logout.xhtml index 0c4010dc..6f73ddbb 100644 --- a/web/logout.xhtml +++ b/web/logout.xhtml @@ -8,14 +8,30 @@ > - Sitzung beenden + #{msg.PAGE_TITLE_INDEX_LOGOUT} - Sitzung beenden + #{msg.CONTENT_TITLE_INDEX_LOGOUT} - Offenes TODO! + + +

+
+ +
+ +
+ +
+ + +
+ -- 2.39.5