1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one or more 3 * contributor license agreements. See the NOTICE file distributed with 4 * this work for additional information regarding copyright ownership. 5 * The ASF licenses this file to You under the Apache License, Version 2.0 6 * (the "License"); you may not use this file except in compliance with 7 * the License. You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 package org.apache.commons.chain.web.jakarta.servlet; 18 19 import org.apache.commons.chain.web.AbstractSessionScopeMap; 20 import org.apache.commons.chain.web.MutableParameterMap; 21 22 import jakarta.servlet.http.HttpServletRequest; 23 import jakarta.servlet.http.HttpSession; 24 25 /** 26 * Private implementation of {@code Map} for HTTP session attributes. 27 * 28 * @author Craig R. McClanahan 29 * @version $Revision$ $Date$ 30 */ 31 final class ServletSessionScopeMap extends AbstractSessionScopeMap<HttpSession, HttpServletRequest> { 32 33 /** 34 * The constructor for the servlet session attributes. 35 * 36 * @param request the servlet-request. 37 */ 38 ServletSessionScopeMap(HttpServletRequest request) { 39 super(request); 40 } 41 42 /** 43 * Returns the current {@code HttpSession} associated with this request or, if 44 * there is no current session and <code>create</code> is true, returns a new 45 * session. 46 * 47 * <p>If {@code create} is {@code false} and the request has no valid 48 * {@code HttpSession}, this method returns {@code null}.</p> 49 * 50 * <p>To make sure the session is properly maintained, you must call this 51 * method before the response is committed. If the container is using cookies 52 * to maintain session integrity and is asked to create a new session when the 53 * response is committed, an IllegalStateException is thrown.</p> 54 * 55 * @param create {@code true} to create a new session for this request if 56 * necessary; {@code false} to return {@code null} if there's no 57 * current session 58 * 59 * @return the {@code HttpSession} associated with this request or {@code null} 60 * if {@code create} is {@code false} and the request has no valid 61 * session 62 */ 63 @Override 64 protected HttpSession getSession(final boolean create) { 65 return getRequest().getSession(create); 66 } 67 68 /** 69 * Creates a new mutable-parameter-map to access the session-attributes. 70 * 71 * @return a new mutable-parameter-map to access the session-attributes 72 */ 73 @Override 74 protected MutableParameterMap<HttpSession, Object> createParameterMap() { 75 return new MutableParameterMap<>(getSession(), getSession()::getAttribute, 76 getSession()::getAttributeNames, getSession()::removeAttribute, 77 getSession()::setAttribute); 78 } 79 }