package org.glassfish.grizzly.servlet;
import org.glassfish.grizzly.http.Cookie;
import org.glassfish.grizzly.http.server.DefaultSessionManager;
import org.glassfish.grizzly.http.server.Request;
import org.glassfish.grizzly.http.server.Session;
import org.glassfish.grizzly.http.server.SessionManager;
import org.glassfish.grizzly.http.server.util.Globals;
public class ServletSessionManager implements SessionManager {
public static SessionManager instance() {
return LazyHolder.INSTANCE;
}
private static class LazyHolder {
private static final ServletSessionManager INSTANCE = new ServletSessionManager();
}
private final SessionManager defaultManager = DefaultSessionManager.instance();
private String sessionCookieName = Globals.SESSION_COOKIE_NAME;
private ServletSessionManager() {
}
@Override
public Session getSession(final Request request,
final String requestedSessionId) {
return defaultManager.getSession(request, requestedSessionId);
}
@Override
public Session createSession(final Request request) {
return defaultManager.createSession(request);
}
@Override
public String changeSessionId(final Request request, final Session session) {
return defaultManager.changeSessionId(request, session);
}
@Override
public void configureSessionCookie(final Request request, final Cookie cookie) {
defaultManager.configureSessionCookie(request, cookie);
final HttpServletRequestImpl servletRequest =
ServletHandler.getServletRequest(request);
assert servletRequest != null;
final javax.servlet.SessionCookieConfig cookieConfig =
servletRequest.getContextImpl().getSessionCookieConfig();
if (cookieConfig.getDomain() != null) {
cookie.setDomain(cookieConfig.getDomain());
}
if (cookieConfig.getPath() != null) {
cookie.setPath(cookieConfig.getPath());
}
if (cookieConfig.getComment() != null) {
cookie.setVersion(1);
cookie.setComment(cookieConfig.getComment());
}
cookie.setSecure(cookieConfig.isSecure());
cookie.setHttpOnly(cookieConfig.isHttpOnly());
cookie.setMaxAge(cookieConfig.getMaxAge());
}
@Override
public void setSessionCookieName(final String name) {
if (name != null && !name.isEmpty()) {
sessionCookieName = name;
}
}
@Override
public String getSessionCookieName() {
return sessionCookieName;
}
}