Package org.springframework.security.oauth2.config.annotation.authentication.configurers

Source Code of org.springframework.security.oauth2.config.annotation.authentication.configurers.InMemoryClientDetailsServiceConfigurer

/*
* Copyright 2002-2013 the original author or authors.
*
* 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 org.springframework.security.oauth2.config.annotation.authentication.configurers;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.oauth2.provider.BaseClientDetails;
import org.springframework.security.oauth2.provider.ClientDetails;
import org.springframework.security.oauth2.provider.ClientDetailsService;
import org.springframework.security.oauth2.provider.InMemoryClientDetailsService;
import org.springframework.security.oauth2.provider.client.ClientDetailsUserDetailsService;

/**
* @author Rob Winch
*
*/
public class InMemoryClientDetailsServiceConfigurer extends SecurityConfigurerAdapter<AuthenticationManager,AuthenticationManagerBuilder>{
    private List<ClientBuilder> clientBuilders = new ArrayList<ClientBuilder>();

    public ClientBuilder withClient(String clientId) {
        ClientBuilder clientBuilder = new ClientBuilder(clientId);
        this.clientBuilders.add(clientBuilder);
        return clientBuilder;
    }

    @Override
    public void init(AuthenticationManagerBuilder builder) throws Exception {
        Map<String,ClientDetails> clientDetails = new HashMap<String,ClientDetails>(clientBuilders.size());
        for(ClientBuilder clientDetailsBldr : clientBuilders) {
            clientDetails.put(clientDetailsBldr.clientId, clientDetailsBldr.build());
        }
        InMemoryClientDetailsService clientDetailsService = new InMemoryClientDetailsService();
        clientDetailsService.setClientDetailsStore(clientDetails);

        ClientDetailsUserDetailsService userDetailsService = new ClientDetailsUserDetailsService(clientDetailsService);
        builder.userDetailsService(userDetailsService);

        builder.setSharedObject(ClientDetailsService.class, clientDetailsService);
    }

    @Override
    public void configure(AuthenticationManagerBuilder builder) throws Exception {

    }

    public final class ClientBuilder {
        private final String clientId;
        private Collection<String> authorizedGrantTypes = new ArrayList<String>();
        private Collection<String> authorities = new ArrayList<String>();
        private Integer accessTokenValiditySeconds;
        private Integer refreshTokenValiditySeconds;
        private Collection<String> scopes = new ArrayList<String>();
        private String secret;
        private Set<String> registeredRedirectUris = new HashSet<String>();
        private Set<String> resourceIds = new HashSet<String>();

        private ClientDetails build() {
            BaseClientDetails result = new BaseClientDetails();
            result.setClientId(clientId);
            result.setAuthorizedGrantTypes(authorizedGrantTypes);
            result.setAccessTokenValiditySeconds(accessTokenValiditySeconds);
            result.setRefreshTokenValiditySeconds(refreshTokenValiditySeconds);
            result.setRegisteredRedirectUri(registeredRedirectUris);
            result.setClientSecret(secret);
            return result;
        }

        public ClientBuilder resourceIds(String... resourceIds) {
            for(String resourceId : resourceIds) {
                this.resourceIds.add(resourceId);
            }
            return this;
        }

        public ClientBuilder redirectUris(String... registeredRedirectUris) {
            for(String redirectUri : registeredRedirectUris) {
                this.registeredRedirectUris.add(redirectUri);
            }
            return this;
        }

        public ClientBuilder authorizedGrantTypes(String... authorizedGrantTypes) {
            for(String grant : authorizedGrantTypes) {
                this.authorizedGrantTypes.add(grant);
            }
            return this;
        }

        public ClientBuilder accessTokenValiditySeconds(int accessTokenValiditySeconds) {
            this.accessTokenValiditySeconds = accessTokenValiditySeconds;
            return this;
        }

        public ClientBuilder refreshTokenValiditySeconds(int refreshTokenValiditySeconds) {
            this.refreshTokenValiditySeconds = refreshTokenValiditySeconds;
            return this;
        }

        public ClientBuilder secret(String secret) {
            this.secret = secret;
            return this;
        }

        public ClientBuilder scopes(String... scopes) {
            for(String scope : scopes) {
                this.scopes.add(scope);
            }
            return this;
        }

        public ClientBuilder authorities(String... authorities) {
            for(String authority : authorities) {
                this.authorities.add(authority);
            }
            return this;
        }

        public InMemoryClientDetailsServiceConfigurer and() {
            return InMemoryClientDetailsServiceConfigurer.this;
        }


        private ClientBuilder(String clientId) {
            this.clientId = clientId;
        }
    }
}
TOP

Related Classes of org.springframework.security.oauth2.config.annotation.authentication.configurers.InMemoryClientDetailsServiceConfigurer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.