Search in sources :

Example 31 with BeanComponentDefinition

use of org.springframework.beans.factory.parsing.BeanComponentDefinition in project redisson by redisson.

the class RedissonDefinitionParser method parseAddressTypes.

private void parseAddressTypes(Element element, String addressType, BeanDefinitionBuilder redissonDef, ParserContext parserContext) {
    BeanComponentDefinition invoker = helper.invoker(element, parserContext.getContainingComponent().getName(), "add" + StringUtils.capitalize(addressType), new String[] { element.getAttribute("value") }, parserContext);
    String id = invoker.getName();
    redissonDef.addDependsOn(id);
}
Also used : BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition)

Example 32 with BeanComponentDefinition

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

the class HttpConfigurationBuilder method createSessionManagementFilters.

private void createSessionManagementFilters() {
    Element sessionMgmtElt = DomUtils.getChildElementByTagName(this.httpElt, Elements.SESSION_MANAGEMENT);
    Element sessionCtrlElt = null;
    String sessionFixationAttribute = null;
    String invalidSessionUrl = null;
    String invalidSessionStrategyRef = null;
    String sessionAuthStratRef = null;
    String errorUrl = null;
    boolean sessionControlEnabled = false;
    if (sessionMgmtElt != null) {
        if (this.sessionPolicy == SessionCreationPolicy.STATELESS) {
            this.pc.getReaderContext().error(Elements.SESSION_MANAGEMENT + "  cannot be used" + " in combination with " + ATT_CREATE_SESSION + "='" + SessionCreationPolicy.STATELESS + "'", this.pc.extractSource(sessionMgmtElt));
        }
        sessionFixationAttribute = sessionMgmtElt.getAttribute(ATT_SESSION_FIXATION_PROTECTION);
        invalidSessionUrl = sessionMgmtElt.getAttribute(ATT_INVALID_SESSION_URL);
        invalidSessionStrategyRef = sessionMgmtElt.getAttribute(ATT_INVALID_SESSION_STRATEGY_REF);
        sessionAuthStratRef = sessionMgmtElt.getAttribute(ATT_SESSION_AUTH_STRATEGY_REF);
        errorUrl = sessionMgmtElt.getAttribute(ATT_SESSION_AUTH_ERROR_URL);
        sessionCtrlElt = DomUtils.getChildElementByTagName(sessionMgmtElt, Elements.CONCURRENT_SESSIONS);
        sessionControlEnabled = sessionCtrlElt != null;
        if (StringUtils.hasText(invalidSessionUrl) && StringUtils.hasText(invalidSessionStrategyRef)) {
            this.pc.getReaderContext().error(ATT_INVALID_SESSION_URL + " attribute cannot be used in combination with" + " the " + ATT_INVALID_SESSION_STRATEGY_REF + " attribute.", sessionMgmtElt);
        }
        if (sessionControlEnabled) {
            if (StringUtils.hasText(sessionAuthStratRef)) {
                this.pc.getReaderContext().error(ATT_SESSION_AUTH_STRATEGY_REF + " attribute cannot be used" + " in combination with <" + Elements.CONCURRENT_SESSIONS + ">", this.pc.extractSource(sessionCtrlElt));
            }
            createConcurrencyControlFilterAndSessionRegistry(sessionCtrlElt);
        }
    }
    if (!StringUtils.hasText(sessionFixationAttribute)) {
        sessionFixationAttribute = OPT_CHANGE_SESSION_ID;
    } else if (StringUtils.hasText(sessionAuthStratRef)) {
        this.pc.getReaderContext().error(ATT_SESSION_FIXATION_PROTECTION + " attribute cannot be used" + " in combination with " + ATT_SESSION_AUTH_STRATEGY_REF, this.pc.extractSource(sessionMgmtElt));
    }
    if (this.sessionPolicy == SessionCreationPolicy.STATELESS) {
        // SEC-1424: do nothing
        return;
    }
    boolean sessionFixationProtectionRequired = !sessionFixationAttribute.equals(OPT_SESSION_FIXATION_NO_PROTECTION);
    ManagedList<BeanMetadataElement> delegateSessionStrategies = new ManagedList<>();
    BeanDefinitionBuilder concurrentSessionStrategy;
    BeanDefinitionBuilder sessionFixationStrategy = null;
    BeanDefinitionBuilder registerSessionStrategy;
    if (this.csrfAuthStrategy != null) {
        delegateSessionStrategies.add(this.csrfAuthStrategy);
    }
    if (sessionControlEnabled) {
        Assert.state(this.sessionRegistryRef != null, "No sessionRegistryRef found");
        concurrentSessionStrategy = BeanDefinitionBuilder.rootBeanDefinition(ConcurrentSessionControlAuthenticationStrategy.class);
        concurrentSessionStrategy.addConstructorArgValue(this.sessionRegistryRef);
        String maxSessions = this.pc.getReaderContext().getEnvironment().resolvePlaceholders(sessionCtrlElt.getAttribute("max-sessions"));
        if (StringUtils.hasText(maxSessions)) {
            concurrentSessionStrategy.addPropertyValue("maximumSessions", maxSessions);
        }
        String exceptionIfMaximumExceeded = sessionCtrlElt.getAttribute("error-if-maximum-exceeded");
        if (StringUtils.hasText(exceptionIfMaximumExceeded)) {
            concurrentSessionStrategy.addPropertyValue("exceptionIfMaximumExceeded", exceptionIfMaximumExceeded);
        }
        delegateSessionStrategies.add(concurrentSessionStrategy.getBeanDefinition());
    }
    boolean useChangeSessionId = OPT_CHANGE_SESSION_ID.equals(sessionFixationAttribute);
    if (sessionFixationProtectionRequired || StringUtils.hasText(invalidSessionUrl)) {
        if (useChangeSessionId) {
            sessionFixationStrategy = BeanDefinitionBuilder.rootBeanDefinition(ChangeSessionIdAuthenticationStrategy.class);
        } else {
            sessionFixationStrategy = BeanDefinitionBuilder.rootBeanDefinition(SessionFixationProtectionStrategy.class);
        }
        delegateSessionStrategies.add(sessionFixationStrategy.getBeanDefinition());
    }
    if (StringUtils.hasText(sessionAuthStratRef)) {
        delegateSessionStrategies.add(new RuntimeBeanReference(sessionAuthStratRef));
    }
    if (sessionControlEnabled) {
        registerSessionStrategy = BeanDefinitionBuilder.rootBeanDefinition(RegisterSessionAuthenticationStrategy.class);
        registerSessionStrategy.addConstructorArgValue(this.sessionRegistryRef);
        delegateSessionStrategies.add(registerSessionStrategy.getBeanDefinition());
    }
    if (delegateSessionStrategies.isEmpty()) {
        this.sfpf = null;
        return;
    }
    BeanDefinitionBuilder sessionMgmtFilter = BeanDefinitionBuilder.rootBeanDefinition(SessionManagementFilter.class);
    RootBeanDefinition failureHandler = new RootBeanDefinition(SimpleUrlAuthenticationFailureHandler.class);
    if (StringUtils.hasText(errorUrl)) {
        failureHandler.getPropertyValues().addPropertyValue("defaultFailureUrl", errorUrl);
    }
    sessionMgmtFilter.addPropertyValue("authenticationFailureHandler", failureHandler);
    sessionMgmtFilter.addConstructorArgValue(this.contextRepoRef);
    if (!StringUtils.hasText(sessionAuthStratRef) && sessionFixationStrategy != null && !useChangeSessionId) {
        if (sessionFixationProtectionRequired) {
            sessionFixationStrategy.addPropertyValue("migrateSessionAttributes", sessionFixationAttribute.equals(OPT_SESSION_FIXATION_MIGRATE_SESSION));
        }
    }
    if (!delegateSessionStrategies.isEmpty()) {
        BeanDefinitionBuilder sessionStrategy = BeanDefinitionBuilder.rootBeanDefinition(CompositeSessionAuthenticationStrategy.class);
        BeanDefinition strategyBean = sessionStrategy.getBeanDefinition();
        sessionStrategy.addConstructorArgValue(delegateSessionStrategies);
        sessionAuthStratRef = this.pc.getReaderContext().generateBeanName(strategyBean);
        this.pc.registerBeanComponent(new BeanComponentDefinition(strategyBean, sessionAuthStratRef));
    }
    if (StringUtils.hasText(invalidSessionUrl)) {
        BeanDefinitionBuilder invalidSessionBldr = BeanDefinitionBuilder.rootBeanDefinition(SimpleRedirectInvalidSessionStrategy.class);
        invalidSessionBldr.addConstructorArgValue(invalidSessionUrl);
        this.invalidSession = invalidSessionBldr.getBeanDefinition();
        sessionMgmtFilter.addPropertyValue("invalidSessionStrategy", this.invalidSession);
    } else if (StringUtils.hasText(invalidSessionStrategyRef)) {
        sessionMgmtFilter.addPropertyReference("invalidSessionStrategy", invalidSessionStrategyRef);
    }
    sessionMgmtFilter.addConstructorArgReference(sessionAuthStratRef);
    this.sfpf = (RootBeanDefinition) sessionMgmtFilter.getBeanDefinition();
    this.sessionStrategyRef = new RuntimeBeanReference(sessionAuthStratRef);
}
Also used : BeanMetadataElement(org.springframework.beans.BeanMetadataElement) Element(org.w3c.dom.Element) ManagedList(org.springframework.beans.factory.support.ManagedList) RegisterSessionAuthenticationStrategy(org.springframework.security.web.authentication.session.RegisterSessionAuthenticationStrategy) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanDefinition(org.springframework.beans.factory.config.BeanDefinition) BeanMetadataElement(org.springframework.beans.BeanMetadataElement) BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) ChangeSessionIdAuthenticationStrategy(org.springframework.security.web.authentication.session.ChangeSessionIdAuthenticationStrategy) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) BeanComponentDefinition(org.springframework.beans.factory.parsing.BeanComponentDefinition) RuntimeBeanReference(org.springframework.beans.factory.config.RuntimeBeanReference) SessionFixationProtectionStrategy(org.springframework.security.web.authentication.session.SessionFixationProtectionStrategy) ConcurrentSessionControlAuthenticationStrategy(org.springframework.security.web.authentication.session.ConcurrentSessionControlAuthenticationStrategy)

Example 33 with BeanComponentDefinition

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

the class HttpConfigurationBuilder method createSecurityContextPersistenceFilter.

private void createSecurityContextPersistenceFilter() {
    BeanDefinitionBuilder scpf = BeanDefinitionBuilder.rootBeanDefinition(SecurityContextPersistenceFilter.class);
    String repoRef = this.httpElt.getAttribute(ATT_SECURITY_CONTEXT_REPOSITORY);
    String disableUrlRewriting = this.httpElt.getAttribute(ATT_DISABLE_URL_REWRITING);
    if (!StringUtils.hasText(disableUrlRewriting)) {
        disableUrlRewriting = "true";
    }
    if (StringUtils.hasText(repoRef)) {
        if (this.sessionPolicy == SessionCreationPolicy.ALWAYS) {
            scpf.addPropertyValue("forceEagerSessionCreation", Boolean.TRUE);
        }
    } else {
        BeanDefinitionBuilder contextRepo;
        if (this.sessionPolicy == SessionCreationPolicy.STATELESS) {
            contextRepo = BeanDefinitionBuilder.rootBeanDefinition(NullSecurityContextRepository.class);
        } else {
            contextRepo = BeanDefinitionBuilder.rootBeanDefinition(HttpSessionSecurityContextRepository.class);
            switch(this.sessionPolicy) {
                case ALWAYS:
                    contextRepo.addPropertyValue("allowSessionCreation", Boolean.TRUE);
                    scpf.addPropertyValue("forceEagerSessionCreation", Boolean.TRUE);
                    break;
                case NEVER:
                    contextRepo.addPropertyValue("allowSessionCreation", Boolean.FALSE);
                    scpf.addPropertyValue("forceEagerSessionCreation", Boolean.FALSE);
                    break;
                default:
                    contextRepo.addPropertyValue("allowSessionCreation", Boolean.TRUE);
                    scpf.addPropertyValue("forceEagerSessionCreation", Boolean.FALSE);
            }
            if ("true".equals(disableUrlRewriting)) {
                contextRepo.addPropertyValue("disableUrlRewriting", Boolean.TRUE);
            }
        }
        BeanDefinition repoBean = contextRepo.getBeanDefinition();
        repoRef = this.pc.getReaderContext().generateBeanName(repoBean);
        this.pc.registerBeanComponent(new BeanComponentDefinition(repoBean, repoRef));
    }
    this.contextRepoRef = new RuntimeBeanReference(repoRef);
    scpf.addConstructorArgValue(this.contextRepoRef);
    this.securityContextPersistenceFilter = scpf.getBeanDefinition();
}
Also used : BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) HttpSessionSecurityContextRepository(org.springframework.security.web.context.HttpSessionSecurityContextRepository) NullSecurityContextRepository(org.springframework.security.web.context.NullSecurityContextRepository) 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 34 with BeanComponentDefinition

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

the class HttpConfigurationBuilder method createFilterSecurityInterceptor.

private void createFilterSecurityInterceptor(BeanReference authManager) {
    boolean useExpressions = FilterInvocationSecurityMetadataSourceParser.isUseExpressions(this.httpElt);
    RootBeanDefinition securityMds = FilterInvocationSecurityMetadataSourceParser.createSecurityMetadataSource(this.interceptUrls, this.addAllAuth, this.httpElt, this.pc);
    RootBeanDefinition accessDecisionMgr;
    ManagedList<BeanDefinition> voters = new ManagedList<>(2);
    if (useExpressions) {
        BeanDefinitionBuilder expressionVoter = BeanDefinitionBuilder.rootBeanDefinition(WebExpressionVoter.class);
        // Read the expression handler from the FISMS
        RuntimeBeanReference expressionHandler = (RuntimeBeanReference) securityMds.getConstructorArgumentValues().getArgumentValue(1, RuntimeBeanReference.class).getValue();
        expressionVoter.addPropertyValue("expressionHandler", expressionHandler);
        voters.add(expressionVoter.getBeanDefinition());
    } else {
        voters.add(GrantedAuthorityDefaultsParserUtils.registerWithDefaultRolePrefix(this.pc, RoleVoterBeanFactory.class));
        voters.add(new RootBeanDefinition(AuthenticatedVoter.class));
    }
    accessDecisionMgr = new RootBeanDefinition(AffirmativeBased.class);
    accessDecisionMgr.getConstructorArgumentValues().addGenericArgumentValue(voters);
    accessDecisionMgr.setSource(this.pc.extractSource(this.httpElt));
    // Set up the access manager reference for http
    String accessManagerId = this.httpElt.getAttribute(ATT_ACCESS_MGR);
    if (!StringUtils.hasText(accessManagerId)) {
        accessManagerId = this.pc.getReaderContext().generateBeanName(accessDecisionMgr);
        this.pc.registerBeanComponent(new BeanComponentDefinition(accessDecisionMgr, accessManagerId));
    }
    BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(FilterSecurityInterceptor.class);
    builder.addPropertyReference("accessDecisionManager", accessManagerId);
    builder.addPropertyValue("authenticationManager", authManager);
    if ("false".equals(this.httpElt.getAttribute(ATT_ONCE_PER_REQUEST))) {
        builder.addPropertyValue("observeOncePerRequest", Boolean.FALSE);
    }
    builder.addPropertyValue("securityMetadataSource", securityMds);
    BeanDefinition fsiBean = builder.getBeanDefinition();
    String fsiId = this.pc.getReaderContext().generateBeanName(fsiBean);
    this.pc.registerBeanComponent(new BeanComponentDefinition(fsiBean, fsiId));
    // Create and register a DefaultWebInvocationPrivilegeEvaluator for use with
    // taglibs etc.
    BeanDefinition wipe = new RootBeanDefinition(DefaultWebInvocationPrivilegeEvaluator.class);
    wipe.getConstructorArgumentValues().addGenericArgumentValue(new RuntimeBeanReference(fsiId));
    this.pc.registerBeanComponent(new BeanComponentDefinition(wipe, this.pc.getReaderContext().generateBeanName(wipe)));
    this.fsi = new RuntimeBeanReference(fsiId);
}
Also used : AuthenticatedVoter(org.springframework.security.access.vote.AuthenticatedVoter) BeanDefinitionBuilder(org.springframework.beans.factory.support.BeanDefinitionBuilder) AffirmativeBased(org.springframework.security.access.vote.AffirmativeBased) RootBeanDefinition(org.springframework.beans.factory.support.RootBeanDefinition) ManagedList(org.springframework.beans.factory.support.ManagedList) 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 35 with BeanComponentDefinition

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

the class HttpSecurityBeanDefinitionParser method createPortResolver.

private RuntimeBeanReference createPortResolver(BeanReference portMapper, ParserContext pc) {
    RootBeanDefinition portResolver = new RootBeanDefinition(PortResolverImpl.class);
    portResolver.getPropertyValues().addPropertyValue("portMapper", portMapper);
    String portResolverName = pc.getReaderContext().generateBeanName(portResolver);
    pc.registerBeanComponent(new BeanComponentDefinition(portResolver, portResolverName));
    return new RuntimeBeanReference(portResolverName);
}
Also used : 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