- if (authorization.getName() != null) {
- request.setAttribute(HttpContext.REMOTE_USER, authorization.getName());
- request.setAttribute(HttpContext.AUTHORIZATION, authorization);
-
- CmsSession cmsSession = CmsSessionImpl.getByLocalId(httpSessId);
- if (cmsSession == null)
- cmsSession = new WebCmsSessionImpl(subject, authorization, httpSessId);
- request.setAttribute(CmsSession.class.getName(), cmsSession);
+ String remoteUser = authorization.getName() != null ? authorization.getName()
+ : NodeConstants.ROLE_ANONYMOUS;
+ request.setAttribute(HttpContext.REMOTE_USER, remoteUser);
+ request.setAttribute(HttpContext.AUTHORIZATION, authorization);
+
+ CmsSessionImpl cmsSession = CmsSessionImpl.getByLocalId(httpSessId);
+ if (cmsSession != null) {
+ if (authorization.getName() != null) {
+ if (cmsSession.getAuthorization().getName() == null) {
+ cmsSession.close();
+ cmsSession = null;
+ } else if (!authorization.getName().equals(cmsSession.getAuthorization().getName())) {
+ throw new CmsException("Inconsistent user " + authorization.getName()
+ + " for existing CMS session " + cmsSession);
+ }
+ // keyring
+ if (cmsSession != null)
+ subject.getPrivateCredentials().addAll(cmsSession.getSecretKeys());
+ } else {// anonymous
+ if (cmsSession.getAuthorization().getName() != null) {
+ cmsSession.close();
+ // TODO rather throw an exception ? log a warning ?
+ cmsSession = null;
+ }
+ }
+ } else if (cmsSession == null) {
+ cmsSession = new WebCmsSessionImpl(subject, authorization, locale, request);
+ }
+ // request.setAttribute(CmsSession.class.getName(), cmsSession);
+ if (cmsSession != null) {