SessionContextUtil.java
/*
* Copyright 2020 The Apache Software Foundation.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.synapse.transport.passthru.util;
import org.apache.axis2.Constants;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.context.SessionContext;
import org.apache.axis2.transport.http.HTTPConstants;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* This manages session context in the message context
*/
public class SessionContextUtil {
public static SessionContext createSessionContext(MessageContext messageContext) {
HttpServletRequest request = (HttpServletRequest) messageContext.getProperty(
HTTPConstants.MC_HTTP_SERVLETREQUEST);
if (request == null) {
// This can happen inside a HostObject accessed by a Jaggery application.
return null;
}
SessionContext sessionContext = null;
HttpSession httpSession = request.getSession(true);
if (httpSession != null) {
sessionContext =
(SessionContext) httpSession.getAttribute(Constants.SESSION_CONTEXT_PROPERTY);
if (sessionContext == null) {
String cookieValueString = httpSession.getId();
sessionContext = new SessionContext(null);
sessionContext.setParent(messageContext.getConfigurationContext());
sessionContext.setCookieID(cookieValueString);
httpSession.setAttribute(Constants.SESSION_CONTEXT_PROPERTY, sessionContext);
messageContext.setSessionContext(sessionContext);
messageContext.setProperty("SessionId", cookieValueString);
} else if (sessionContext.getParent() != messageContext.getConfigurationContext()) {
httpSession.removeAttribute(Constants.SESSION_CONTEXT_PROPERTY);
sessionContext = new SessionContext(null);
sessionContext.setParent(messageContext.getConfigurationContext());
String cookieValueString = httpSession.getId();
sessionContext.setCookieID(cookieValueString);
messageContext.setProperty("SessionId", cookieValueString);
httpSession.setAttribute(Constants.SESSION_CONTEXT_PROPERTY,
sessionContext);
}
}
return sessionContext;
}
}