Spring Data Redis как менеджер кеша Spring MVC, Spring Security не проходит аутентификацию - PullRequest
0 голосов
/ 01 марта 2019

Я работаю над использованием кеша с приложением Spring mvc (Spring Framework 5.1.0), которое использует Spring Security (5.1.4) с данными Spring JPA (2.0.13).Я проверил кеширование с помощью SimpleCaching, который доступен в Spring и работает нормально.Я хочу перейти на лучший менеджер кэширования, такой как Redis (Redis server 5.0.3).Я настроил RedisCacheManager как таковой (Spring redis: 2.0.13; Jedis: 2.10.2):

<bean id="poolConfig" class="redis.clients.jedis.JedisPoolConfig">
    <property name="maxIdle" value="8"/>
    <property name="maxWaitMillis" value="6000"/>
    <property name="testOnBorrow" value="true"/>
</bean>

<bean id="jedisConnectionFactory" class="org.springframework.data.redis.connection.jedis.JedisConnectionFactory"
      p:host-name="localhost" p:port="6379" 
      p:pool-config-ref="poolConfig" p:usePool="true"/>

<bean id="redisCacheWriter" class="org.springframework.data.redis.cache.DefaultRedisCacheWriter">
    <constructor-arg name="connectionFactory" ref="jedisConnectionFactory"/>
</bean>

<bean id="defaultRedisCacheConfiguration" class="org.springframework.data.redis.cache.RedisCacheConfiguration"
      factory-method="defaultCacheConfig"/>


    <bean id="cacheManager" class="org.springframework.data.redis.cache.RedisCacheManager"  
   c:cacheWriter-ref="redisCacheWriter" c:defaultCacheConfiguration-ref="defaultRedisCacheConfiguration" c:initialCacheNames="user"
   p:transaction-aware="true"/>

Я использую @Cachable и @CachePut для выполнения кэширования.Я вижу в журнале, что он правильно подбирает кеш и инициализирует его из извлеченного значения из базы данных.

TRACE [ework.cache.interceptor.CacheInterceptor]: Computed cache key 'User= \********\' for operation Builder[public abstract eee.entity.User eee.repository.UserRepository.findByEmail(java.lang.String)] caches=[user] | key=''User= ' + #result.email' | keyGenerator='' | cacheManager='' | cacheResolver='' | condition='#result != null' | unless=''

Однако, когда пользователь пытается войти в систему, он терпит неудачу, указывая, что пользователь не существует.Как будто данные не существуют в базе данных.Это происходит, только если я переключаюсь на Redis как cacheManager.Есть идеи?Заранее спасибо

...