|
|
|
@ -59,12 +59,12 @@ public final class XorCsrfTokenRequestAttributeHandler extends CsrfTokenRequestA |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
private Supplier<CsrfToken> deferCsrfTokenUpdate(Supplier<CsrfToken> csrfTokenSupplier) { |
|
|
|
private Supplier<CsrfToken> deferCsrfTokenUpdate(Supplier<CsrfToken> csrfTokenSupplier) { |
|
|
|
return () -> { |
|
|
|
return new CachedCsrfTokenSupplier(() -> { |
|
|
|
CsrfToken csrfToken = csrfTokenSupplier.get(); |
|
|
|
CsrfToken csrfToken = csrfTokenSupplier.get(); |
|
|
|
Assert.state(csrfToken != null, "csrfToken supplier returned null"); |
|
|
|
Assert.state(csrfToken != null, "csrfToken supplier returned null"); |
|
|
|
String updatedToken = createXoredCsrfToken(this.secureRandom, csrfToken.getToken()); |
|
|
|
String updatedToken = createXoredCsrfToken(this.secureRandom, csrfToken.getToken()); |
|
|
|
return new DefaultCsrfToken(csrfToken.getHeaderName(), csrfToken.getParameterName(), updatedToken); |
|
|
|
return new DefaultCsrfToken(csrfToken.getHeaderName(), csrfToken.getParameterName(), updatedToken); |
|
|
|
}; |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
@ -123,4 +123,24 @@ public final class XorCsrfTokenRequestAttributeHandler extends CsrfTokenRequestA |
|
|
|
return xoredCsrf; |
|
|
|
return xoredCsrf; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private static final class CachedCsrfTokenSupplier implements Supplier<CsrfToken> { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private final Supplier<CsrfToken> delegate; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private CsrfToken csrfToken; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
private CachedCsrfTokenSupplier(Supplier<CsrfToken> delegate) { |
|
|
|
|
|
|
|
this.delegate = delegate; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public CsrfToken get() { |
|
|
|
|
|
|
|
if (this.csrfToken == null) { |
|
|
|
|
|
|
|
this.csrfToken = this.delegate.get(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return this.csrfToken; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|