Search in sources :

Example 26 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project spring-security by spring-projects.

the class AuthenticationConfigBuilder method createOAuth2ClientFilter.

void createOAuth2ClientFilter(BeanReference requestCache, BeanReference authenticationManager) {
    Element oauth2ClientElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.OAUTH2_CLIENT);
    if (oauth2ClientElt == null) {
        return;
    }
    this.oauth2ClientEnabled = true;
    OAuth2ClientBeanDefinitionParser parser = new OAuth2ClientBeanDefinitionParser(requestCache, authenticationManager);
    parser.parse(oauth2ClientElt, this.pc);
    BeanDefinition defaultAuthorizedClientRepository = parser.getDefaultAuthorizedClientRepository();
    registerDefaultAuthorizedClientRepositoryIfNecessary(defaultAuthorizedClientRepository);
    this.authorizationRequestRedirectFilter = parser.getAuthorizationRequestRedirectFilter();
    String authorizationRequestRedirectFilterId = this.pc.getReaderContext().generateBeanName(this.authorizationRequestRedirectFilter);
    this.pc.registerBeanComponent(new BeanComponentDefinition(this.authorizationRequestRedirectFilter, authorizationRequestRedirectFilterId));
    this.authorizationCodeGrantFilter = parser.getAuthorizationCodeGrantFilter();
    String authorizationCodeGrantFilterId = this.pc.getReaderContext().generateBeanName(this.authorizationCodeGrantFilter);
    this.pc.registerBeanComponent(new BeanComponentDefinition(this.authorizationCodeGrantFilter, authorizationCodeGrantFilterId));
    BeanDefinition authorizationCodeAuthenticationProvider = parser.getAuthorizationCodeAuthenticationProvider();
    String authorizationCodeAuthenticationProviderId = this.pc.getReaderContext().generateBeanName(authorizationCodeAuthenticationProvider);
    this.pc.registerBeanComponent(new BeanComponentDefinition(authorizationCodeAuthenticationProvider, authorizationCodeAuthenticationProviderId));
    this.authorizationCodeAuthenticationProviderRef = new RuntimeBeanReference(authorizationCodeAuthenticationProviderId);
}
Also used : BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference)

Example 27 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project spring-security by spring-projects.

the class AuthenticationConfigBuilder method createAnonymousFilter.

void createAnonymousFilter() {
    Element anonymousElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.ANONYMOUS);
    if (anonymousElt != null && "false".equals(anonymousElt.getAttribute("enabled"))) {
        return;
    }
    String grantedAuthority = null;
    String username = null;
    String key = null;
    Object source = this.pc.extractSource(this.httpElt);
    if (anonymousElt != null) {
        grantedAuthority = anonymousElt.getAttribute("granted-authority");
        username = anonymousElt.getAttribute("username");
        key = anonymousElt.getAttribute(ATT_KEY);
        source = this.pc.extractSource(anonymousElt);
    }
    if (!StringUtils.hasText(grantedAuthority)) {
        grantedAuthority = "ROLE_ANONYMOUS";
    }
    if (!StringUtils.hasText(username)) {
        username = "anonymousUser";
    }
    if (!StringUtils.hasText(key)) {
        // Generate a random key for the Anonymous provider
        key = createKey();
    }
    this.anonymousFilter = new RootBeanDefinition(AnonymousAuthenticationFilter.class);
    this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(0, key);
    this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(1, username);
    this.anonymousFilter.getConstructorArgumentValues().addIndexedArgumentValue(2, AuthorityUtils.commaSeparatedStringToAuthorityList(grantedAuthority));
    this.anonymousFilter.setSource(source);
    RootBeanDefinition anonymousProviderBean = new RootBeanDefinition(AnonymousAuthenticationProvider.class);
    anonymousProviderBean.getConstructorArgumentValues().addIndexedArgumentValue(0, key);
    anonymousProviderBean.setSource(this.anonymousFilter.getSource());
    String id = this.pc.getReaderContext().generateBeanName(anonymousProviderBean);
    this.pc.registerBeanComponent(new BeanComponentDefinition(anonymousProviderBean, id));
    this.anonymousProviderRef = new RuntimeBeanReference(id);
}
Also used : AnonymousAuthenticationFilter(org.springframework.security.web.authentication.AnonymousAuthenticationFilter) BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference)

Example 28 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project spring-security by spring-projects.

the class AuthenticationConfigBuilder method createFormLoginFilter.

void createFormLoginFilter(BeanReference sessionStrategy, BeanReference authManager) {
    Element formLoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.FORM_LOGIN);
    RootBeanDefinition formFilter = null;
    if (formLoginElt != null || this.autoConfig) {
        FormLoginBeanDefinitionParser parser = new FormLoginBeanDefinitionParser("/login", "POST", AUTHENTICATION_PROCESSING_FILTER_CLASS, this.requestCache, sessionStrategy, this.allowSessionCreation, this.portMapper, this.portResolver);
        parser.parse(formLoginElt, this.pc);
        formFilter = parser.getFilterBean();
        this.formEntryPoint = parser.getEntryPointBean();
        this.loginProcessingUrl = parser.getLoginProcessingUrl();
        this.formLoginPage = parser.getLoginPage();
    }
    if (formFilter != null) {
        formFilter.getPropertyValues().addPropertyValue("allowSessionCreation", this.allowSessionCreation);
        formFilter.getPropertyValues().addPropertyValue("authenticationManager", authManager);
        // Id is required by login page filter
        this.formFilterId = this.pc.getReaderContext().generateBeanName(formFilter);
        this.pc.registerBeanComponent(new BeanComponentDefinition(formFilter, this.formFilterId));
        injectRememberMeServicesRef(formFilter, this.rememberMeServicesId);
    }
}
Also used : BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition)

Example 29 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project spring-security by spring-projects.

the class AuthenticationConfigBuilder method createOAuth2LoginFilter.

void createOAuth2LoginFilter(BeanReference sessionStrategy, BeanReference authManager) {
    Element oauth2LoginElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.OAUTH2_LOGIN);
    if (oauth2LoginElt == null) {
        return;
    }
    this.oauth2LoginEnabled = true;
    OAuth2LoginBeanDefinitionParser parser = new OAuth2LoginBeanDefinitionParser(this.requestCache, this.portMapper, this.portResolver, sessionStrategy, this.allowSessionCreation);
    BeanDefinition oauth2LoginFilterBean = parser.parse(oauth2LoginElt, this.pc);
    BeanDefinition defaultAuthorizedClientRepository = parser.getDefaultAuthorizedClientRepository();
    registerDefaultAuthorizedClientRepositoryIfNecessary(defaultAuthorizedClientRepository);
    oauth2LoginFilterBean.getPropertyValues().addPropertyValue("authenticationManager", authManager);
    // retrieve the other bean result
    BeanDefinition oauth2LoginAuthProvider = parser.getOAuth2LoginAuthenticationProvider();
    this.oauth2AuthorizationRequestRedirectFilter = parser.getOAuth2AuthorizationRequestRedirectFilter();
    this.oauth2LoginEntryPoint = parser.getOAuth2LoginAuthenticationEntryPoint();
    // generate bean name to be registered
    String oauth2LoginAuthProviderId = this.pc.getReaderContext().generateBeanName(oauth2LoginAuthProvider);
    this.oauth2LoginFilterId = this.pc.getReaderContext().generateBeanName(oauth2LoginFilterBean);
    String oauth2AuthorizationRequestRedirectFilterId = this.pc.getReaderContext().generateBeanName(this.oauth2AuthorizationRequestRedirectFilter);
    this.oauth2LoginLinks = parser.getOAuth2LoginLinks();
    // register the component
    this.pc.registerBeanComponent(new BeanComponentDefinition(oauth2LoginFilterBean, this.oauth2LoginFilterId));
    this.pc.registerBeanComponent(new BeanComponentDefinition(this.oauth2AuthorizationRequestRedirectFilter, oauth2AuthorizationRequestRedirectFilterId));
    this.pc.registerBeanComponent(new BeanComponentDefinition(oauth2LoginAuthProvider, oauth2LoginAuthProviderId));
    this.oauth2LoginAuthenticationProviderRef = new RuntimeBeanReference(oauth2LoginAuthProviderId);
    // oidc provider
    BeanDefinition oauth2LoginOidcAuthProvider = parser.getOAuth2LoginOidcAuthenticationProvider();
    String oauth2LoginOidcAuthProviderId = this.pc.getReaderContext().generateBeanName(oauth2LoginOidcAuthProvider);
    this.pc.registerBeanComponent(new BeanComponentDefinition(oauth2LoginOidcAuthProvider, oauth2LoginOidcAuthProviderId));
    this.oauth2LoginOidcAuthenticationProviderRef = new RuntimeBeanReference(oauth2LoginOidcAuthProviderId);
}
Also used : BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference)

Example 30 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project spring-security by spring-projects.

the class AuthenticationConfigBuilder method createBasicFilter.

void createBasicFilter(BeanReference authManager) {
    Element basicAuthElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.BASIC_AUTH);
    if (basicAuthElt == null && !this.autoConfig) {
        // No basic auth, do nothing
        return;
    }
    String realm = this.httpElt.getAttribute(ATT_REALM);
    if (!StringUtils.hasText(realm)) {
        realm = DEF_REALM;
    }
    BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder.rootBeanDefinition(BasicAuthenticationFilter.class);
    String entryPointId;
    if (basicAuthElt != null) {
        if (StringUtils.hasText(basicAuthElt.getAttribute(ATT_ENTRY_POINT_REF))) {
            this.basicEntryPoint = new RuntimeBeanReference(basicAuthElt.getAttribute(ATT_ENTRY_POINT_REF));
        }
        injectAuthenticationDetailsSource(basicAuthElt, filterBuilder);
    }
    if (this.basicEntryPoint == null) {
        RootBeanDefinition entryPoint = new RootBeanDefinition(BasicAuthenticationEntryPoint.class);
        entryPoint.setSource(this.pc.extractSource(this.httpElt));
        entryPoint.getPropertyValues().addPropertyValue("realmName", realm);
        entryPointId = this.pc.getReaderContext().generateBeanName(entryPoint);
        this.pc.registerBeanComponent(new BeanComponentDefinition(entryPoint, entryPointId));
        this.basicEntryPoint = new RuntimeBeanReference(entryPointId);
    }
    filterBuilder.addConstructorArgValue(authManager);
    filterBuilder.addConstructorArgValue(this.basicEntryPoint);
    this.basicFilter = filterBuilder.getBeanDefinition();
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference)

Aggregations

BeanComponentDefinition (org.springframework.beans.factory.parsing.BeanComponentDefinition)133 RootBeanDefinition (org.springframework.beans.factory.support.RootBeanDefinition)75 BeanDefinition (org.springframework.beans.factory.config.BeanDefinition)52 RuntimeBeanReference (org.springframework.beans.factory.config.RuntimeBeanReference)47 BeanDefinitionBuilder (org.springframework.beans.factory.support.BeanDefinitionBuilder)47 Element (org.w3c.dom.Element)29 BeanMetadataElement (org.springframework.beans.BeanMetadataElement)22 AbstractBeanDefinition (org.springframework.beans.factory.support.AbstractBeanDefinition)22 CompositeComponentDefinition (org.springframework.beans.factory.parsing.CompositeComponentDefinition)20 BeanDefinitionHolder (org.springframework.beans.factory.config.BeanDefinitionHolder)16 ManagedList (org.springframework.beans.factory.support.ManagedList)14 Nullable (org.springframework.lang.Nullable)10 ComponentDefinition (org.springframework.beans.factory.parsing.ComponentDefinition)9 Test (org.junit.jupiter.api.Test)6 BeanDefinitionRegistry (org.springframework.beans.factory.support.BeanDefinitionRegistry)5 NodeList (org.w3c.dom.NodeList)5 Test (org.junit.Test)4 ManagedMap (org.springframework.beans.factory.support.ManagedMap)4 MutablePropertyValues (org.springframework.beans.MutablePropertyValues)3 PropertyValue (org.springframework.beans.PropertyValue)3