我正在使用spring缓存缓存数据。现在,我想在写入缓存之前加密一些数据,并在读取时解密数据。那么有没有什么方法可以为@cachable注解编写自定义拦截器/aop呢
发布于 2020-09-15 13:31:02
您可以简单地为您的Cache
和CacheResolver
使用装饰器,而不是使用面向方面编程。
public class EncodingCacheResolver implements CacheResolver {
private final CacheResolver delegate;
public EncodingCacheResolver(CacheResolver delegate) {
this.delegate=delegate;
}
@Override
public Collection<? extends Cache> resolveCaches(CacheOperationInvocationContext<?> context) {
Collection<Cache> result = delegate.resolveCaches(context);
return result.stream().map(EncodingCache::new).collect(Collectors.toLlist());
}
}
缓存实现
public class EncodingCache implements Cache {
private final Cache delegate;
public EncodingCache(Cache delegate) {
this.delegate=delegate;
}
public String getName() {
return delegate.getName();
}
public Object getNativeCache() {
return delegate.getNativeCache();
}
public void evict(Object key) {
delegate.evict(key)
}
public void put(Object key, Object value) {
Object encodedValue = encode(value);
this.delegate.put(key, encodedValue);
}
public <T> T get(Object key, Class<T> type) {
Object encodedValue = delegate.get(key, type);
return decode(encodedValue);
}
// Other Cache methods omitted but the pattern is the same
private Object encode(Object value) {
// encoding logic here
}
private Object decode(Object value) {
// decoding logic here
}
}
然后进行一些配置
@Configuration
@EnableCache
public void CacheConfiguration {
@Bean
public CacheResolver cacheResolver(CacheManager cacheManager) {
return new EncodingCacheResolver(SimpleCache.of(cacheManager));
}
}
我还没有测试它的实现,只是在我脑海中输入了它。但这或多或少应该是您所需要的。为此,您并不真正需要AOP。
https://stackoverflow.com/questions/46478798
复制相似问题