Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * JBoss, Home of Professional Open Source.
   * Copyright 2012 Red Hat, Inc., and individual contributors
   * as indicated by the @author tags.
   *
   * 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 io.undertow.servlet.spec;
 
 import java.util.Set;
 
 
The HTTP session implementation. Note that for security reasons no attribute names that start with io.undertow are allowed.

Author(s):
Stuart Douglas
 
 public class HttpSessionImpl implements HttpSession {
 
     private static final RuntimePermission PERMISSION = new RuntimePermission("io.undertow.servlet.spec.UNWRAP_HTTP_SESSION");
 
     public static final String IO_UNDERTOW = "io.undertow";
     private final Session session;
     private final ServletContext servletContext;
     private final boolean newSession;
     private volatile boolean invalid;
 
     private HttpSessionImpl(final Session sessionfinal ServletContext servletContextfinal boolean newSession) {
         this. = session;
         this. = servletContext;
         this. = newSession;
     }
 
     public static HttpSessionImpl forSession(final Session sessionfinal ServletContext servletContextfinal boolean newSession) {
         // forSession is called by privileged actions only so no need to do it again
         ServletRequestContext current = ServletRequestContext.current();
         if (current == null) {
             return new HttpSessionImpl(sessionservletContextnewSession);
         } else {
             HttpSessionImpl httpSession = current.getSession();
             if (httpSession == null) {
                 httpSession = new HttpSessionImpl(sessionservletContextnewSession);
                 current.setSession(httpSession);
             } else {
                 if(httpSession.session != session) {
                     //in some rare cases it may be that there are two different service contexts involved in the one request
                     //in this case we just return a new session rather than using the thread local version
                     httpSession = new HttpSessionImpl(sessionservletContextnewSession);
                 }
             }
             return httpSession;
         }
     }
 
     @Override
     public long getCreationTime() {
         return .getCreationTime();
     }
 
     @Override
     public String getId() {
         return .getId();
     }
 
     @Override
     public long getLastAccessedTime() {
         return .getLastAccessedTime();
     }
 
     @Override
     public ServletContext getServletContext() {
         return ;
     }
    @Override
    public void setMaxInactiveInterval(final int interval) {
        .setMaxInactiveInterval(interval);
    }
    @Override
    public int getMaxInactiveInterval() {
        return .getMaxInactiveInterval();
    }
    @Override
        return null;
    }
    @Override
    public Object getAttribute(final String name) {
        if(name.startsWith()) {
            throw new SecurityException();
        }
        return .getAttribute(name);
    }
    @Override
    public Object getValue(final String name) {
        if(name.startsWith()) {
            throw new SecurityException();
        }
        return getAttribute(name);
    }
    @Override
    public Enumeration<StringgetAttributeNames() {
        Set<StringattributeNames = getFilteredAttributeNames();
        return new IteratorEnumeration<String>(attributeNames.iterator());
    }
    private Set<StringgetFilteredAttributeNames() {
        Set<StringattributeNames = new HashSet<String>(.getAttributeNames());
        Iterator<Stringit = attributeNames.iterator();
        while (it.hasNext()) {
            if(it.next().startsWith()) {
                it.remove();
            }
        }
        return attributeNames;
    }
    @Override
    public String[] getValueNames() {
        Set<Stringnames = getFilteredAttributeNames();
        String[] ret = new String[names.size()];
        int i = 0;
        for (String name : names) {
            ret[i++] = name;
        }
        return ret;
    }
    @Override
    public void setAttribute(final String namefinal Object value) {
        if(name.startsWith()) {
            throw new SecurityException();
        }
        if (value == null) {
            removeAttribute(name);
        } else {
            .setAttribute(namevalue);
        }
    }
    @Override
    public void putValue(final String namefinal Object value) {
        setAttribute(namevalue);
    }
    @Override
    public void removeAttribute(final String name) {
        if(name.startsWith()) {
            throw new SecurityException();
        }
        .removeAttribute(name);
    }
    @Override
    public void removeValue(final String name) {
        removeAttribute(name);
    }
    @Override
    public void invalidate() {
         = true;
        ServletRequestContext current = SecurityActions.currentServletRequestContext();
        if (current == null) {
            .invalidate(null);
        } else {
            .invalidate(current.getOriginalRequest().getExchange());
        }
    }
    @Override
    public boolean isNew() {
        if () {
            throw ..sessionIsInvalid();
        }
        return ;
    }
    public Session getSession() {
        if(System.getSecurityManager() != null) {
            AccessController.checkPermission();
        }
        return ;
    }
    public boolean isInvalid() {
        return ;
    }
    public static class UnwrapSessionAction implements PrivilegedAction<Session> {
        private final HttpSessionImpl session;
        public UnwrapSessionAction(HttpSession session) {
            this. = (HttpSessionImplsession;
        }
        @Override
        public Session run() {
            return .getSession();
        }
    }
New to GrepCode? Check out our FAQ X