Example usage for org.springframework.security.oauth.consumer OAuthSecurityContextHolder setContext

List of usage examples for org.springframework.security.oauth.consumer OAuthSecurityContextHolder setContext

Introduction

In this page you can find the example usage for org.springframework.security.oauth.consumer OAuthSecurityContextHolder setContext.

Prototype

public static void setContext(OAuthSecurityContext context) 

Source Link

Usage

From source file:org.cloudfoundry.identity.uaa.client.OAuthClientAuthenticationFilterTests.java

private void setUpContext(String tokenName, String secretName, String keyName, String sharedName) {
    resource.setId("foo");
    String consumerKey = System.getProperty(keyName);
    Assume.assumeNotNull(consumerKey);//from   w  w w . j  av a2 s .  c  o m
    String sharedSecret = System.getProperty(sharedName);
    Assume.assumeNotNull(sharedSecret);
    String accessToken = System.getProperty(tokenName);
    Assume.assumeNotNull(accessToken);
    String secret = System.getProperty(secretName);
    Assume.assumeNotNull(accessToken);
    OAuthSecurityContextImpl context = new OAuthSecurityContextImpl();
    OAuthConsumerToken token = new OAuthConsumerToken();
    resource.setConsumerKey(consumerKey);
    resource.setSharedSecret(new SharedConsumerSecretImpl(sharedSecret));
    token.setValue(accessToken);
    token.setSecret(secret);
    context.setAccessTokens(Collections.singletonMap("foo", token));
    OAuthSecurityContextHolder.setContext(context);
}

From source file:info.raack.appliancelabeler.service.OAuthRequestProcessor.java

public <T, S> S processRequest(String uri, OAuthSecurityContext context, ResponseHandler<T, S> handler)
        throws OAuthUnauthorizedException {
    logger.debug("Attempting to request " + uri);

    String responseString = null;
    InputStream xmlInputStream = null;
    try {/*from ww  w  .  ja  va 2  s  .c  om*/
        if (context != null) {
            // set the current authentication context
            OAuthSecurityContextHolder.setContext(context);
        }

        // use the normal request processor for the currently logged in user
        byte[] bytes = oAuthRestTemplate.getForObject(URI.create(uri), byte[].class);

        responseString = new String(bytes);
        //logger.debug(new String(bytes));
        xmlInputStream = new ByteArrayInputStream(bytes);

        //logger.debug("response: " + new String(bytes));
        synchronized (this) {
            try {
                T item = (T) ((JAXBElement) u1.unmarshal(xmlInputStream)).getValue();
                return handler.extractValue(item);
            } catch (Exception e) {
                // don't do anything if we can't unmarshall with the teds.xsd - try the other one
                try {
                    xmlInputStream.close();
                } catch (Exception e2) {

                }

                xmlInputStream = new ByteArrayInputStream(bytes);
            }
            T item = (T) ((JAXBElement) u2.unmarshal(xmlInputStream)).getValue();
            return handler.extractValue(item);
        }

    } catch (HttpClientErrorException e2) {
        // if unauthorized - our credentials are bad or have been revoked - throw exception up the stack
        if (e2.getStatusCode() == HttpStatus.UNAUTHORIZED) {
            throw new OAuthUnauthorizedException();
        } else {
            throw new RuntimeException(
                    "Unknown remote server error " + e2.getStatusCode() + " (" + e2.getStatusText()
                            + ") returned when requesting " + uri + "; " + e2.getResponseBodyAsString());
        }
    } catch (HttpServerErrorException e3) {
        throw new RuntimeException(
                "Unknown remote server error " + e3.getStatusCode() + " (" + e3.getStatusText()
                        + ") returned when requesting " + uri + "; " + e3.getResponseBodyAsString());
    } catch (Exception e) {
        throw new RuntimeException(
                "Could not request " + uri + (responseString != null ? " response was " + responseString : ""),
                e);
    } finally {
        try {
            if (xmlInputStream != null) {
                xmlInputStream.close();
            }
        } catch (Exception e) {
        }
    }
}

From source file:org.springframework.security.oauth.consumer.filter.OAuthConsumerContextFilter.java

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain)
        throws IOException, ServletException {
    HttpServletRequest request = (HttpServletRequest) servletRequest;
    HttpServletResponse response = (HttpServletResponse) servletResponse;
    OAuthSecurityContextImpl context = new OAuthSecurityContextImpl();
    context.setDetails(request);//from   w ww.  ja v a2  s. c  om

    Map<String, OAuthConsumerToken> rememberedTokens = getRememberMeServices().loadRememberedTokens(request,
            response);
    Map<String, OAuthConsumerToken> accessTokens = new TreeMap<String, OAuthConsumerToken>();
    Map<String, OAuthConsumerToken> requestTokens = new TreeMap<String, OAuthConsumerToken>();
    if (rememberedTokens != null) {
        for (Map.Entry<String, OAuthConsumerToken> tokenEntry : rememberedTokens.entrySet()) {
            OAuthConsumerToken token = tokenEntry.getValue();
            if (token != null) {
                if (token.isAccessToken()) {
                    accessTokens.put(tokenEntry.getKey(), token);
                } else {
                    requestTokens.put(tokenEntry.getKey(), token);
                }
            }
        }
    }

    context.setAccessTokens(accessTokens);
    OAuthSecurityContextHolder.setContext(context);
    if (LOG.isDebugEnabled()) {
        LOG.debug("Storing access tokens in request attribute '" + getAccessTokensRequestAttribute() + "'.");
    }

    try {
        try {
            request.setAttribute(getAccessTokensRequestAttribute(),
                    new ArrayList<OAuthConsumerToken>(accessTokens.values()));
            chain.doFilter(request, response);
        } catch (Exception e) {
            try {
                ProtectedResourceDetails resourceThatNeedsAuthorization = checkForResourceThatNeedsAuthorization(
                        e);
                String neededResourceId = resourceThatNeedsAuthorization.getId();
                while (!accessTokens.containsKey(neededResourceId)) {
                    OAuthConsumerToken token = requestTokens.remove(neededResourceId);
                    if (token == null) {
                        token = getTokenServices().getToken(neededResourceId);
                    }

                    String verifier = request.getParameter(OAuthProviderParameter.oauth_verifier.toString());
                    // if the token is null OR
                    // if there is NO access token and (we're not using 1.0a or the verifier is not null)
                    if (token == null || (!token.isAccessToken()
                            && (!resourceThatNeedsAuthorization.isUse10a() || verifier == null))) {
                        //no token associated with the resource, start the oauth flow.
                        //if there's a request token, but no verifier, we'll assume that a previous oauth request failed and we need to get a new request token.
                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Obtaining request token for resource: " + neededResourceId);
                        }

                        //obtain authorization.
                        String callbackURL = response.encodeRedirectURL(getCallbackURL(request));
                        token = getConsumerSupport().getUnauthorizedRequestToken(neededResourceId, callbackURL);
                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Request token obtained for resource " + neededResourceId + ": " + token);
                        }

                        //okay, we've got a request token, now we need to authorize it.
                        requestTokens.put(neededResourceId, token);
                        getTokenServices().storeToken(neededResourceId, token);
                        String redirect = getUserAuthorizationRedirectURL(resourceThatNeedsAuthorization, token,
                                callbackURL);

                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Redirecting request to " + redirect
                                    + " for user authorization of the request token for resource "
                                    + neededResourceId + ".");
                        }

                        request.setAttribute(
                                "org.springframework.security.oauth.consumer.AccessTokenRequiredException", e);
                        this.redirectStrategy.sendRedirect(request, response, redirect);
                        return;
                    } else if (!token.isAccessToken()) {
                        //we have a presumably authorized request token, let's try to get an access token with it.
                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Obtaining access token for resource: " + neededResourceId);
                        }

                        //authorize the request token and store it.
                        try {
                            token = getConsumerSupport().getAccessToken(token, verifier);
                        } finally {
                            getTokenServices().removeToken(neededResourceId);
                        }

                        if (LOG.isDebugEnabled()) {
                            LOG.debug("Access token " + token + " obtained for resource " + neededResourceId
                                    + ". Now storing and using.");
                        }

                        getTokenServices().storeToken(neededResourceId, token);
                    }

                    accessTokens.put(neededResourceId, token);

                    try {
                        //try again
                        if (!response.isCommitted()) {
                            request.setAttribute(getAccessTokensRequestAttribute(),
                                    new ArrayList<OAuthConsumerToken>(accessTokens.values()));
                            chain.doFilter(request, response);
                        } else {
                            //dang. what do we do now?
                            throw new IllegalStateException(
                                    "Unable to reprocess filter chain with needed OAuth2 resources because the response is already committed.");
                        }
                    } catch (Exception e1) {
                        resourceThatNeedsAuthorization = checkForResourceThatNeedsAuthorization(e1);
                        neededResourceId = resourceThatNeedsAuthorization.getId();
                    }
                }
            } catch (OAuthRequestFailedException eo) {
                fail(request, response, eo);
            } catch (Exception ex) {
                Throwable[] causeChain = getThrowableAnalyzer().determineCauseChain(ex);
                OAuthRequestFailedException rfe = (OAuthRequestFailedException) getThrowableAnalyzer()
                        .getFirstThrowableOfType(OAuthRequestFailedException.class, causeChain);
                if (rfe != null) {
                    fail(request, response, rfe);
                } else {
                    // Rethrow ServletExceptions and RuntimeExceptions as-is
                    if (ex instanceof ServletException) {
                        throw (ServletException) ex;
                    } else if (ex instanceof RuntimeException) {
                        throw (RuntimeException) ex;
                    }

                    // Wrap other Exceptions. These are not expected to happen
                    throw new RuntimeException(ex);
                }
            }
        }
    } finally {
        OAuthSecurityContextHolder.setContext(null);
        HashMap<String, OAuthConsumerToken> tokensToRemember = new HashMap<String, OAuthConsumerToken>();
        tokensToRemember.putAll(requestTokens);
        tokensToRemember.putAll(accessTokens);
        getRememberMeServices().rememberTokens(tokensToRemember, request, response);
    }
}