private String getUriPathSegmentParamValue()

in web/src/main/java/org/apache/shiro/web/session/mgt/DefaultWebSessionManager.java [168:215]


    private String getUriPathSegmentParamValue(ServletRequest servletRequest, String paramName) {

        if (!(servletRequest instanceof HttpServletRequest)) {
            return null;
        }
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String uri = request.getRequestURI();
        if (uri == null) {
            return null;
        }

        int queryStartIndex = uri.indexOf('?');
        //get rid of the query string
        if (queryStartIndex >= 0) {
            uri = uri.substring(0, queryStartIndex);
        }

        //now check for path segment parameters:
        int index = uri.indexOf(';');
        if (index < 0) {
            //no path segment params - return:
            return null;
        }

        //there are path segment params, let's get the last one that may exist:
        final String token = paramName + "=";

        //uri now contains only the path segment params
        uri = uri.substring(index + 1);

        //we only care about the last JSESSIONID param:
        index = uri.lastIndexOf(token);
        if (index < 0) {
            //no segment param:
            return null;
        }

        uri = uri.substring(index + token.length());

        //strip off any remaining segment params:
        index = uri.indexOf(';');
        if (index >= 0) {
            uri = uri.substring(0, index);
        }

        //what remains is the value
        return uri;
    }