1 package org
.argeo
.cms
.internal
.kernel
;
3 import java
.util
.ArrayList
;
7 import javax
.servlet
.http
.HttpServletRequest
;
8 import javax
.servlet
.http
.HttpSession
;
10 import org
.apache
.commons
.logging
.Log
;
11 import org
.apache
.commons
.logging
.LogFactory
;
12 import org
.argeo
.cms
.auth
.WebCmsSession
;
13 import org
.osgi
.framework
.ServiceRegistration
;
14 import org
.osgi
.service
.http
.HttpContext
;
15 import org
.osgi
.service
.useradmin
.Authorization
;
17 public class WebCmsSessionImpl
implements WebCmsSession
{
18 private final static Log log
= LogFactory
.getLog(WebCmsSessionImpl
.class);
20 private final String id
;
21 private final Authorization authorization
;
23 private List
<SubHttpSession
> subHttpSessions
= new ArrayList
<>();
25 private ServiceRegistration
<WebCmsSession
> serviceRegistration
;
27 public WebCmsSessionImpl(String id
, Authorization authorization
) {
29 this.authorization
= authorization
;
32 public void cleanUp() {
33 for (SubHttpSession subSession
: subHttpSessions
)
35 serviceRegistration
.unregister();
39 public Authorization
getAuthorization() {
44 public void addHttpSession(HttpServletRequest request
) {
45 subHttpSessions
.add(new SubHttpSession(request
));
48 public String
getId() {
52 public void setServiceRegistration(ServiceRegistration
<WebCmsSession
> serviceRegistration
) {
53 this.serviceRegistration
= serviceRegistration
;
56 public String
toString() {
57 return "CMS Session #" + id
;
60 static class SubHttpSession
{
61 private final HttpSession httpSession
;
62 private final String sessionId
;
63 private final String originalURI
;
64 private final String servletPath
;
66 private final Date start
= new Date();
68 public SubHttpSession(HttpServletRequest request
) {
69 this.httpSession
= request
.getSession();
70 this.sessionId
= httpSession
.getId();
71 this.originalURI
= request
.getRequestURI();
72 this.servletPath
= request
.getServletPath();
75 public Date
getStart() {
79 public void cleanUp() {
81 httpSession
.setAttribute(HttpContext
.AUTHORIZATION
, null);
82 httpSession
.setMaxInactiveInterval(1);
83 } catch (Exception e
) {
84 log
.warn("Could not clean up " + sessionId
, e
);