Improve web socket authentication
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / auth / HttpRequestCallbackHandler.java
index bcc403fa996c4060cc4e3baa27158a40392cf298..df971e687f0c31bbd2eaf957a376be0c736a9c76 100644 (file)
@@ -8,6 +8,7 @@ import javax.security.auth.callback.LanguageCallback;
 import javax.security.auth.callback.UnsupportedCallbackException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
 
 /**
  * Callback handler populating {@link HttpRequestCallback}s with the provided
@@ -16,18 +17,27 @@ import javax.servlet.http.HttpServletResponse;
 public class HttpRequestCallbackHandler implements CallbackHandler {
        final private HttpServletRequest request;
        final private HttpServletResponse response;
+       final private HttpSession httpSession;
 
        public HttpRequestCallbackHandler(HttpServletRequest request, HttpServletResponse response) {
                this.request = request;
+               this.httpSession = request.getSession(false);
                this.response = response;
        }
 
+       public HttpRequestCallbackHandler(HttpSession httpSession) {
+               this.httpSession = httpSession;
+               this.request = null;
+               this.response = null;
+       }
+
        @Override
        public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
                for (Callback callback : callbacks)
                        if (callback instanceof HttpRequestCallback) {
                                ((HttpRequestCallback) callback).setRequest(request);
                                ((HttpRequestCallback) callback).setResponse(response);
+                               ((HttpRequestCallback) callback).setHttpSession(httpSession);
                        } else if (callback instanceof LanguageCallback) {
                                ((LanguageCallback) callback).setLocale(request.getLocale());
                        }