+ Subject subject = cmsSession.getSubject();
+ try {
+ //
+ // LOGIN
+ //
+ new ArgeoLoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).logout();
+ LoginContext loginContext = new ArgeoLoginContext(
+ LOGIN_CONTEXT_USER, subject, this);
+ loginContext.login();
+
+ // save context in session
+ final HttpSession httpSession = RWT.getRequest().getSession();
+ Subject.doAs(subject, new PrivilegedAction<Void>() {
+
+ @Override
+ public Void run() {
+ httpSession.setAttribute(ACCESS_CONTROL_CONTEXT,
+ AccessController.getContext());
+ return null;
+ }
+ });
+ } catch (LoginException e1) {
+ try {
+ new ArgeoLoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).login();
+ } catch (LoginException e) {
+ throw new CmsException("Cannot authenticate anonymous", e1);
+ }
+ throw new CmsException("Cannot authenticate", e1);
+ }
+ close();
+ dispose();
+ cmsSession.authChange();
+ }
+
+ protected void logout() {
+ final CmsSession cmsSession = (CmsSession) getDisplay().getData(
+ CmsSession.KEY);
+ Subject subject = cmsSession.getSubject();
+ try {
+ //
+ // LOGOUT
+ //
+ new ArgeoLoginContext(LOGIN_CONTEXT_USER, subject).logout();
+ new ArgeoLoginContext(LOGIN_CONTEXT_ANONYMOUS, subject).login();
+
+ HttpServletRequest httpRequest = RWT.getRequest();
+ HttpSession httpSession = httpRequest.getSession();
+ httpSession.setAttribute(ACCESS_CONTROL_CONTEXT, null);
+ } catch (LoginException e1) {
+ throw new CmsException("Cannot authenticate anonymous", e1);
+ }