SecurityContextHolder.java

package sprout.security.context;

import sprout.config.AppConfig;
import sprout.security.core.SecurityContext;

import java.util.function.Supplier;

public final class SecurityContextHolder {

    private static SecurityContextHolderStrategy strategy;
    private static final String DEFAULT_STRATEGY = "bio";


    public static synchronized void initialize(AppConfig appConfig) {
        if (strategy != null) return;
        String strategyName = appConfig.getStringProperty("sprout.security.strategy", DEFAULT_STRATEGY);
        if ("nio".equals(strategyName)) {
            strategy = new ChannelAwareSecurityContextHolderStrategy();
            System.out.println("SecurityContextHolder initialized with ChannelAware strategy.");
        } else {
            strategy = new ThreadLocalSecurityContextHolderStrategy();
            System.out.println("SecurityContextHolder initialized with ThreadLocal strategy.");
        }

    }

    public static void clearContext() {
        strategy.clearContext();
    }

    public static SecurityContext getContext() {
        return strategy.getContext();
    }

    public static Supplier<SecurityContext> getDeferredContext() {
        return strategy.getDeferredContext();
    }

    public static void setContext(SecurityContext context) {
        strategy.setContext(context);
    }

    public static void setDeferredContext(Supplier<SecurityContext> deferredContext) {
        strategy.setDeferredContext(deferredContext);
    }

    public static SecurityContext createEmptyContext() {
        return strategy.createEmptyContext();
    }

    public static SecurityContextHolderStrategy getContextHolderStrategy() {
        return strategy;
    }



}