/* * Copyright 2004-2015 the Seasar Foundation and the Others. * * 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.seasar.extension.httpsession; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequestWrapper; import javax.servlet.http.HttpSession; import org.seasar.framework.container.servlet.S2ContainerServlet; import org.seasar.framework.util.UUID; /** * セッション情報をS2で管理するためのHttpServletRequestWrapperです。 * * @author higa * */ public class S2HttpServletRequestWrapper extends HttpServletRequestWrapper { private HttpServletRequest request; private SessionStateManager sessionStateManager; private S2HttpSession session; private String requestedSessionIdFromCookie; private String requestedSessionIdFromURL; private String createdSessionId; /** * <code>S2HttpServletRequestWrapper</code>のインスタンスを構築します。 * * @param request * リクエスト * @param sessionStateManager * セッション状態マネージャ */ public S2HttpServletRequestWrapper(HttpServletRequest request, SessionStateManager sessionStateManager) { super(request); this.request = request; this.sessionStateManager = sessionStateManager; setupSessionId(); } /** * セッション識別子をセットアップします。 */ protected void setupSessionId() { requestedSessionIdFromCookie = SessionIdUtil .getSessionIdFromCookie(request); if (requestedSessionIdFromCookie == null) { requestedSessionIdFromURL = SessionIdUtil .getSessionIdFromURL(request); } if (requestedSessionIdFromURL == null) { createdSessionId = UUID.create(); } } /** * HTTPセッションを破棄します。 */ protected void invalidateSession() { session = null; requestedSessionIdFromCookie = null; requestedSessionIdFromURL = null; createdSessionId = UUID.create(); } public HttpSession getSession() { return getSession(true); } public HttpSession getSession(boolean create) { if (session != null) { return session; } boolean isNew = false; String sessionId = getRequestedSessionId(); if (sessionId == null) { if (!create) { return null; } sessionId = createdSessionId; isNew = true; } session = new S2HttpSession(this, sessionId, sessionStateManager, S2ContainerServlet.getInstance().getServletContext(), isNew); return session; } /** * Seasar2用のセッションを返します。 * * @return Seasar2用のセッション */ public S2HttpSession getS2HttpSession() { return session; } public String getRequestedSessionId() { if (requestedSessionIdFromCookie != null) { return requestedSessionIdFromCookie; } return requestedSessionIdFromURL; } /** * 作成されたセッション識別子を返します。 * * @return 作成されたセッション識別子 */ public String getCreatedSessionId() { return createdSessionId; } /** * セッション識別子を返します。 * * @return セッション識別子 */ public String getSessionId() { String sessionId = getRequestedSessionId(); if (sessionId == null) { sessionId = createdSessionId; } return sessionId; } public boolean isRequestedSessionIdFromCookie() { return requestedSessionIdFromCookie != null; } public boolean isRequestedSessionIdFromUrl() { return isRequestedSessionIdFromURL(); } public boolean isRequestedSessionIdFromURL() { return requestedSessionIdFromURL != null; } }