All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.payneteasy.superfly.security.processor.SSOUserShortCircuitingPostProcessor Maven / Gradle / Ivy

package com.payneteasy.superfly.security.processor;

import org.springframework.security.core.Authentication;

import com.payneteasy.superfly.api.SSORole;
import com.payneteasy.superfly.api.SSOUser;
import com.payneteasy.superfly.security.CompoundRoleSource;
import com.payneteasy.superfly.security.RoleSource;
import com.payneteasy.superfly.security.SSOActionRoleSource;
import com.payneteasy.superfly.security.SSORoleRoleSource;
import com.payneteasy.superfly.security.StringTransformer;
import com.payneteasy.superfly.security.authentication.CompoundAuthentication;
import com.payneteasy.superfly.security.authentication.SSOUserAuthenticationToken;
import com.payneteasy.superfly.security.authentication.SSOUserTransportAuthenticationToken;

/**
 * Post-processor which allows to build a final authentication.
 *
 * @author Roman Puchkovskiy
 */
public class SSOUserShortCircuitingPostProcessor implements AuthenticationPostProcessor {

    private boolean finishWithSuperflyFinalAuthentication = false;
    private StringTransformer[] roleNameTransformers = new StringTransformer[]{};
    private RoleSource roleSource = createDefaultRoleSource();

    public void setFinishWithSuperflyFinalAuthentication(boolean b) {
        this.finishWithSuperflyFinalAuthentication = b;
    }

    public void setRoleNameTransformers(StringTransformer[] roleNameTransformers) {
        this.roleNameTransformers = roleNameTransformers;
    }

    public void setRoleSource(RoleSource roleSource) {
        this.roleSource = roleSource;
    }

    public Authentication postProcess(Authentication auth) {
        CompoundAuthentication compound = (CompoundAuthentication) auth;
        SSOUserTransportAuthenticationToken token = (SSOUserTransportAuthenticationToken) compound.getLatestReadyAuthentication();
        SSOUser ssoUser = token.getSsoUser();

        Authentication result;
        if (finishWithSuperflyFinalAuthentication && ssoUser.getActionsMap().size() == 1) {
            result = createFinalAuthentication(token, ssoUser,
                    ssoUser.getActionsMap().keySet().iterator().next());
        } else {
            result = auth;
        }
        return result;
    }

    protected Authentication createFinalAuthentication(Authentication authentication,
            SSOUser ssoUser, SSORole role) {
        return new SSOUserAuthenticationToken(ssoUser, role,
                authentication.getCredentials(), authentication.getDetails(),
                roleNameTransformers, roleSource);
    }

    protected RoleSource createDefaultRoleSource() {
        RoleSource[] sources = new RoleSource[2];
        sources[0] = new SSOActionRoleSource();
        sources[1] = new SSORoleRoleSource();
        return new CompoundRoleSource(sources);
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy