@SuppressWarnings("unchecked") private static SavedRequest deserializeSavedRequest( final byte[] data ) { ByteArrayInputStream bis = null; ObjectInputStream ois = null; try { bis = new ByteArrayInputStream( data ); ois = new ObjectInputStream( bis ); final SavedRequest savedRequest = new SavedRequest(); savedRequest.setBody((ByteChunk) ois.readObject()); savedRequest.setContentType((String) ois.readObject()); // no cookies support setCookies(savedRequest, ois.readObject()); setHeaders(savedRequest, (Map<String, List<String>>) ois.readObject()); setLocales(savedRequest, (List<Locale>) ois.readObject()); savedRequest.setMethod((String) ois.readObject()); savedRequest.setQueryString((String) ois.readObject()); savedRequest.setRequestURI((String) ois.readObject()); savedRequest.setDecodedRequestURI((String) ois.readObject()); return savedRequest; } catch ( final IOException e ) { throw new IllegalArgumentException( "Could not deserialize SavedRequest", e ); } catch ( final ClassNotFoundException e ) { throw new IllegalArgumentException( "Could not deserialize SavedRequest", e ); } finally { closeSilently( bis ); closeSilently( ois ); } }
private static byte[] serializeSavedRequest( final Object obj ) { if(obj == null) { return null; } final SavedRequest savedRequest = (SavedRequest) obj; ByteArrayOutputStream bos = null; ObjectOutputStream oos = null; try { bos = new ByteArrayOutputStream(); oos = new ObjectOutputStream( bos ); oos.writeObject(savedRequest.getBody()); oos.writeObject(savedRequest.getContentType()); // Cookies not cloneable... omit for now - oos.writeObject(newArrayList(savedRequest.getCookies())); oos.writeObject(getHeaders(savedRequest)); oos.writeObject(newArrayList(savedRequest.getLocales())); oos.writeObject(savedRequest.getMethod()); // obj.getParameters() are not used in tc6 and not existing in tc7 // -> we omit them here oos.writeObject(savedRequest.getQueryString()); oos.writeObject(savedRequest.getRequestURI()); oos.writeObject(savedRequest.getDecodedRequestURI()); oos.flush(); return bos.toByteArray(); } catch ( final IOException e ) { throw new IllegalArgumentException( "Non-serializable object", e ); } finally { closeSilently( bos ); closeSilently( oos ); } }
private static void setHeaders(final SavedRequest obj, final Map<String, List<String>> headers) { if(headers != null) { for (final Entry<String, List<String>> entry : headers.entrySet()) { final List<String> values = entry.getValue(); for (final String value : values) { obj.addHeader(entry.getKey(), value); } } } }
private static Map<String, List<String>> getHeaders(final SavedRequest obj) { final Map<String, List<String>> result = new HashMap<String, List<String>>(); final Iterator<String> namesIter = obj.getHeaderNames(); while (namesIter.hasNext()) { final String name = namesIter.next(); final List<String> values = new ArrayList<String>(); result.put(name, values); final Iterator<String> valuesIter = obj.getHeaderValues(name); while (valuesIter.hasNext()) { final String value = valuesIter.next(); values.add(value); } } return result; }
SavedRequest saved = new SavedRequest(); Cookie cookies[] = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) saved.addCookie(cookies[i]); Enumeration names = request.getHeaderNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); Enumeration values = request.getHeaders(name); while (values.hasMoreElements()) { String value = (String) values.nextElement(); saved.addHeader(name, value); while (locales.hasMoreElements()) { Locale locale = (Locale) locales.nextElement(); saved.addLocale(locale); body.append(buffer, 0, bytesRead); saved.setBody(body); saved.setContentType(request.getContentType()); saved.setMethod(request.getMethod()); saved.setQueryString(request.getQueryString()); saved.setRequestURI(request.getRequestURI()); session.setNote(Constants.FORM_REQUEST_NOTE, saved);
Principal principal = request.getUserPrincipal(); String ssoId = (String) request.getNote(Constants.REQ_SSOID_NOTE); if (principal != null) { if (log.isDebugEnabled()) { associate(ssoId, request.getSessionInternal(true)); (String) session.getNote(Constants.SESS_USERNAME_NOTE); String password = (String) session.getNote(Constants.SESS_PASSWORD_NOTE); if ((username != null) && (password != null)) { if (log.isDebugEnabled()) { String uri = request.getContextPath() + landingPage; SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); saved.setDecodedRequestURI(uri); request.getSessionInternal(true).setNote( Constants.FORM_REQUEST_NOTE, saved); String uri = request.getContextPath() + landingPage; SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); saved.setDecodedRequestURI(uri); session.setNote(Constants.FORM_REQUEST_NOTE, saved); response.sendRedirect(response.encodeRedirectURL(uri));
request.clearCookies(); Iterator cookies = saved.getCookies(); while (cookies.hasNext()) { request.addCookie((Cookie) cookies.next()); MimeHeaders rmh = request.getCoyoteRequest().getMimeHeaders(); rmh.recycle(); boolean cachable = "GET".equalsIgnoreCase(saved.getMethod()) || "HEAD".equalsIgnoreCase(saved.getMethod()); Iterator names = saved.getHeaderNames(); while (names.hasNext()) { String name = (String) names.next(); Iterator values = saved.getHeaderValues(name); while (values.hasNext()) { rmh.addValue(name).setString( (String)values.next() ); Iterator locales = saved.getLocales(); if ("POST".equalsIgnoreCase(saved.getMethod())) { ByteChunk body = saved.getBody(); String savedContentType = saved.getContentType(); if (savedContentType == null) { savedContentType = "application/x-www-form-urlencoded"; request.getCoyoteRequest().method().setString(saved.getMethod()); (saved.getQueryString());
SavedRequest saved = new SavedRequest(); Cookie cookies[] = request.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) saved.addCookie(cookies[i]); Enumeration names = request.getHeaderNames(); while (names.hasMoreElements()) { String name = (String) names.nextElement(); Enumeration values = request.getHeaders(name); while (values.hasMoreElements()) { String value = (String) values.nextElement(); saved.addHeader(name, value); while (locales.hasMoreElements()) { Locale locale = (Locale) locales.nextElement(); saved.addLocale(locale); Map parameters = request.getParameterMap(); String paramName = (String) paramNames.next(); String paramValues[] = (String[]) parameters.get(paramName); saved.addParameter(paramName, paramValues); saved.setMethod(request.getMethod()); saved.setQueryString(request.getQueryString()); saved.setRequestURI(request.getRequestURI());
session = request.getSessionInternal(true); if (log.isDebugEnabled()) { log.debug("Checking for reauthenticate in session " + session); (String) session.getNote(Constants.SESS_USERNAME_NOTE); String password = (String) session.getNote(Constants.SESS_PASSWORD_NOTE); if ((username != null) && (password != null)) { if (log.isDebugEnabled()) { session = request.getSessionInternal(true); if (log.isDebugEnabled()) { log.debug("Restore request from session '" String contextPath = request.getContextPath(); SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); saved.setDecodedRequestURI(uri); SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); saved.setDecodedRequestURI(uri);
Principal principal = request.getUserPrincipal(); session = request.getSessionInternal(); if (session == null) { LOG.debug("Session should not be null after authentication"); } else { FederationResponse wfRes = (FederationResponse)session.getNote(FEDERATION_NOTE); LOG.debug("Token already expired. Clean up and redirect"); session.removeNote(FEDERATION_NOTE); session.removeNote(Constants.FORM_PRINCIPAL_NOTE); session.setPrincipal(null); request.getSession().removeAttribute(SECURITY_TOKEN); String uri = request.getContextPath() + landingPage; SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); request.getSessionInternal(true).setNote(Constants.FORM_REQUEST_NOTE, saved); response.sendRedirect(response.encodeRedirectURL(uri)); String uri = request.getContextPath() + landingPage; SavedRequest saved = new SavedRequest(); saved.setMethod("GET"); saved.setRequestURI(uri); session.setNote(Constants.FORM_REQUEST_NOTE, saved);
InputStream is = request.createInputStream(); while (is.read(buffer) >= 0) { request.clearCookies(); Iterator<Cookie> cookies = saved.getCookies(); while (cookies.hasNext()) { request.addCookie(cookies.next()); String method = saved.getMethod(); boolean cacheable = "GET".equalsIgnoreCase(method) || "HEAD".equalsIgnoreCase(method); Iterator<String> names = saved.getHeaderNames(); while (names.hasNext()) { String name = names.next(); Iterator<String> values = saved.getHeaderValues(name); while (values.hasNext()) { rmh.addValue(name).setString(values.next()); Iterator<Locale> locales = saved.getLocales(); ByteChunk body = saved.getBody(); String savedContentType = saved.getContentType(); if (savedContentType == null && "POST".equalsIgnoreCase(method)) { savedContentType = "application/x-www-form-urlencoded";
request.clearCookies(); Iterator cookies = saved.getCookies(); while (cookies.hasNext()) { request.addCookie((Cookie) cookies.next()); request.clearHeaders(); Iterator names = saved.getHeaderNames(); while (names.hasNext()) { String name = (String) names.next(); Iterator values = saved.getHeaderValues(name); Iterator locales = saved.getLocales(); if ("POST".equalsIgnoreCase(saved.getMethod())) { Iterator paramNames = saved.getParameterNames(); while (paramNames.hasNext()) { String paramName = (String) paramNames.next(); String paramValues[] = saved.getParameterValues(paramName); request.setMethod(saved.getMethod()); request.setQueryString(saved.getQueryString()); request.setRequestURI(saved.getRequestURI()); return (true);
/** * Does this request match the saved one (so that it must be the redirect * we signalled after successful authentication? * * @param request The request to be verified */ protected boolean matchRequest(Request request) { // Has a session been created? Session session = request.getSessionInternal(false); if (session == null) return (false); // Is there a saved request? SavedRequest sreq = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE); if (sreq == null) return (false); // Is there a saved principal? if (session.getNote(Constants.FORM_PRINCIPAL_NOTE) == null) return (false); // Does the request URI match? String requestURI = request.getRequestURI(); if (requestURI == null) return (false); return (requestURI.equals(sreq.getRequestURI())); }
protected void saveRequest(Request request, String contextId) throws IOException { String uri = request.getDecodedRequestURI(); Session session = request.getSessionInternal(true); if (session != null) { LOG.debug("Save request in session '{}'", session.getIdInternal()); } if (session != null && uri != null) { SavedRequest saved; synchronized (session) { super.saveRequest(request, session); saved = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE); } session.setNote(SESSION_SAVED_REQUEST_PREFIX + uri, saved); StringBuilder sb = new StringBuilder(saved.getRequestURI()); if (saved.getQueryString() != null) { sb.append('?'); sb.append(saved.getQueryString()); } session.setNote(SESSION_SAVED_URI_PREFIX + contextId, sb.toString()); } }
/** * Return the request URI (with the corresponding query string, if any) * from the saved request so that we can redirect to it. * * @param session Our current session */ protected String savedRequestURL(Session session) { SavedRequest saved = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE); if (saved == null) return (null); StringBuffer sb = new StringBuffer(saved.getRequestURI()); if (saved.getQueryString() != null) { sb.append('?'); sb.append(saved.getQueryString()); } return (sb.toString()); }
SavedRequest saved = new SavedRequest(); Cookie cookies[] = hreq.getCookies(); if (cookies != null) { for (int i = 0; i < cookies.length; i++) saved.addCookie(cookies[i]); while (values.hasMoreElements()) { String value = (String) values.nextElement(); saved.addHeader(name, value); saved.setContentLength(hreq.getContentLength()); saved.addLocale(locale); saved.setContentType(hreq.getContentType()); saved.setBody(body); saved.setMethod(hreq.getMethod()); saved.setQueryString(hreq.getQueryString()); saved.setRequestURI(hreq.getRequestURI()); session.setNote(Constants.FORM_REQUEST_NOTE, saved);
Iterator<Cookie> cookies = saved.getCookies(); while (cookies.hasNext()) { request.addCookie(cookies.next()); String method = saved.getMethod(); boolean cachable = "GET".equalsIgnoreCase(method) || "HEAD".equalsIgnoreCase(method); request.clearHeaders(); Iterator<String> names = saved.getHeaderNames(); while (names.hasNext()) { String name = names.next(); Iterator<String> values = saved.getHeaderValues(name); while (values.hasNext()) { request.addHeader(name, values.next()); request.setContentLength(saved.getContentLenght()); Iterator<Locale> locales = saved.getLocales(); while (locales.hasNext()) { request.addLocale(locales.next()); ByteChunk body = saved.getBody(); String savedContentType = saved.getContentType(); if (savedContentType == null && "POST".equalsIgnoreCase(method)) { savedContentType = "application/x-www-form-urlencoded"; request.setQueryString(saved.getQueryString());
/** * Does this request match the saved one (so that it must be the redirect * we signalled after successful authentication? * * @param request The request to be verified * @param session */ protected boolean matchRequest(Request request, Session session) { // Is there a saved request? SavedRequest sreq = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE); if (sreq == null) return (false); // Is there a saved principal? if (session.getNote(Constants.FORM_PRINCIPAL_NOTE) == null) return (false); // Does the request URI match? String requestURI = request.getRequestURI(); if (requestURI == null) return (false); return (requestURI.equals(sreq.getRequestURI())); }
@Test public void testSerializeSessionFieldsIncludesFormRequestNote() { final MemcachedBackupSession session = (MemcachedBackupSession) _manager.createSession( null ); final SavedRequest saved = new SavedRequest(); saved.setQueryString("foo=bar"); saved.setRequestURI("http://www.foo.org"); session.setNote(Constants.FORM_REQUEST_NOTE, saved); final byte[] data = TranscoderService.serializeSessionFields( session ); final MemcachedBackupSession deserialized = TranscoderService.deserializeSessionFields(data, _manager ).getSession(); final SavedRequest actual = (SavedRequest) deserialized.getNote(Constants.FORM_REQUEST_NOTE); assertNotNull(actual); assertDeepEquals(actual, saved); }
/** * Does this request match the saved one (so that it must be the redirect * we signaled after successful authentication? * * @param request The request to be verified */ protected boolean matchRequest(HttpRequest request) { // Has a session been created? Session session = getSession(request, false); if (session == null) return (false); // Is there a saved request? SavedRequest sreq = (SavedRequest) session.getNote(Constants.FORM_REQUEST_NOTE); if (sreq == null) return (false); // Is there a saved principal? if (session.getNote(Constants.FORM_PRINCIPAL_NOTE) == null) return (false); // Does the request URI match? HttpServletRequest hreq = (HttpServletRequest) request.getRequest(); String requestURI = hreq.getRequestURI(); if (requestURI == null) return (false); return (requestURI.equals(sreq.getRequestURI())); }