CacheServiceRedisImpl#getImgCache(String) passed the key straight to Redisson, which throws NullPointerException (map key can't be null) for a null key. Every single-image preview hits this path because compressFileKey is only set for images inside an archive, so with cache.type=redis the preview endpoint always returned HTTP 500. Return an empty list for empty keys, matching CacheServiceJDKImpl.
Fixes#793
* fix(security): support wildcard/cidr host pattern matching
* fix(security): harden host matching against null and DNS rebinding
* fix(security): handle ipv4 unsigned range and deny template fallback
* test(security): verify CIDR matching for IPv4 upper boundary
* fix(security): set UTF-8 deny response and use Locale.ROOT
* fix(security): enforce whitelist with blacklist and harden wildcard rules