ThreadLocalSecurityContextHolderStrategy.java
package sprout.security.context;
import sprout.security.core.SecurityContext;
import java.util.function.Supplier;
public class ThreadLocalSecurityContextHolderStrategy implements SecurityContextHolderStrategy{
private static final ThreadLocal<Supplier<SecurityContext>> contextHolder = new ThreadLocal<>();
@Override
public void clearContext() {
contextHolder.remove();
}
@Override
public SecurityContext getContext() {
return getDeferredContext().get();
}
@Override
public Supplier<SecurityContext> getDeferredContext() {
Supplier<SecurityContext> result = contextHolder.get();
if (result == null) {
SecurityContext context = createEmptyContext();
result = () -> context;
contextHolder.set(result);
}
return result;
}
@Override
public void setContext(SecurityContext context) {
contextHolder.set(() -> context);
}
@Override
public void setDeferredContext(Supplier<SecurityContext> deferredContext) {
contextHolder.set(deferredContext);
}
@Override
public SecurityContext createEmptyContext() {
return new SecurityContextImpl(null);
}
}