캐시에서 읽은 항목을 제거 (무효화)하고 싶습니다.읽기 후에 항목을 제거하도록 구아바 캐시를 구성하는 방법은 무엇입니까?
그래서 항목은 처음 읽을 때까지 캐시에 있어야합니다.
expireAfterAccess(0, TimeUnit.NANOSECONDS)
을 추가하려고했지만 캐시가 채워지지 않았습니다.
그런 식으로 구아바 캐시를 사용할 방법이 있습니까? 아니면 읽은 후에 수동으로 항목을 무효화해야합니까? 내 예를 들어 넌스에서
캐시에서 읽은 항목을 제거 (무효화)하고 싶습니다.읽기 후에 항목을 제거하도록 구아바 캐시를 구성하는 방법은 무엇입니까?
그래서 항목은 처음 읽을 때까지 캐시에 있어야합니다.
expireAfterAccess(0, TimeUnit.NANOSECONDS)
을 추가하려고했지만 캐시가 채워지지 않았습니다.
그런 식으로 구아바 캐시를 사용할 방법이 있습니까? 아니면 읽은 후에 수동으로 항목을 무효화해야합니까? 내 예를 들어 넌스에서
이것은 작동하지 않습니다. "액세스"는 "읽기 또는 쓰기 액세스"를 의미하며 읽기 직후 만료되면 쓰기 직후 만료됩니다.
항목을 수동으로 제거 할 수 있습니다. 단일 액세스에서 그것을하기 위해 asMap()
보기를 사용할 수 있습니다 : 당신은 구아바 캐시 종류의 고급이고 매우 유연 expireAfter(Expiry)
을 제공 카페인으로 전환 할 수
String getAndClear(String key) {
String[] result = {null};
cache.asMap().compute(key, (k, v) ->
result[0] = v;
return null;
});
return result[0];
}
.
그러나 내가 원하는 것은 캐시에 대한 작업이라고 생각하지 않습니다. nonces가 결코 반복되어서는 안되기 때문에, 나는 저장할 이유가 없다고 생각합니다. 일반적으로 즉시 생성하여 사용합니다.
당신이 잘못했을 수 있으며 정교하게 작성하여 보안 문제를 피할 수 있습니다.
안녕하세요, Google의 SafetyNet 구현에 nonces가있는 경우가 있습니다. 전화가 nonce를 요청한 다음 서버가 확인하는 JWT 토큰을 보냅니다. 그 순간 JWT 토큰에 이전에 요청 된 nonce가 있는지 확인해야합니다. 다음을 참조하십시오 : https://www.synopsys.com/blogs/software-security/wp-content/uploads/2015/10/3_safetynet_secure_750.png – pixel
@pixel "세션에 대한 nonce를 저장하는 WebService가 있습니다." 어떤 짐을보십시오. 어쨌든, 나는 나의 대답을 업데이트했다. – maaartinus
+1이 목적을 위해 '캐시'를 사용하지 마십시오. 당신이해야 할 일의 시작 부분에 nonce를 생성 한 다음, 끝나면 (범위를 벗어나 GCed되고) 만료되도록해야합니다. 만료일 15 분은 길거나 지연된 요청을하지 못하도록 방지하는 것입니다. 실제로는 만료일에 가까운 항목에 대해서는 그러한 논스톱을 유지하지 않아야합니다. – dimo414
두 번 생성됩니다
LoadingCache<String, String> cache = CacheBuilder.newBuilder().expireAfterAccess(0, TimeUnit.NANOSECONDS)
.build(new CacheLoader<String, String>() {
@Override
public String load(String key) throws Exception {
return createNonce();
}
});
@Test
public void test_cache_eviction() throws Exception {
String nonce1 = cache.getUnchecked("key");
String nonce2 = cache.getUnchecked("key");
}
public String createNonce() {
String createdNonce = "createdNonce";
System.out.println(createdNonce);
return createdNonce;
}
로그에서 "createdNonce는"두 번 인쇄됩니다.
조작 GET 제거는지도 인터페이스에 remove
간단 :
Object cachedValue = cache.asMap().remove(key);
왜에 접속하여 즉시 무효화하려는 경우, 캐시를해야합니까? –
@OleksandrBondarchuk 특정 기간 (예 : 15 분) 후에 만료되는 항목이 있어야하며 읽기 후에는 즉시 처리해야합니다. nonces를 저장하고 싶습니다. - https://en.wikipedia.org/wiki/Cryptographic_nonce – pixel