У меня есть приложение A
, A
- это обычное приложение Spring (не Springboot), и для управления сеансом используется внешнее redis (с использованием jedis).Когда я вхожу, используя A
, создается ключ со значением JSESSIONID, а его значение содержит сеанс.
Теперь я создал другое приложение с пружинной загрузкой B
, в котором я пытаюсь использовать то же самоесеанс, созданный приложением A
.
Я передаю файл cookie JSESSION в запросе, но приложение не может выбрать сеанс из Redis, даже если мое соединение Redis работает нормально, и я могучтобы получить доступ ко всем значениям ключа, созданным приложением A
в приложении B
, используя режим отладки.
Мой код:
@Configuration
@EnableResourceServer
public class ResourceConfig extends ResourceServerConfigurerAdapter {
@Autowired
private TokenStore tokenStore;
@Autowired
private OAuth2WebSecurityExpressionHandler expressionHandler;
@Autowired
private Http401UnauthorizedEntryPoint http401UnauthorizedEntryPoint;
@Override
public void configure(HttpSecurity httpSecurity) throws Exception {
httpSecurity
.authorizeRequests().anyRequest().authenticated()
.antMatchers("/**/userData/**")
.access("@roleCheckService.hasRole(request,'ROLE_USER')").and().httpBasic();
}
@Bean
public TokenStore tokenStore() {
return new RedisLimitedTokenStore();
}
}
И мой конфиг jedis выглядит как
@Configuration
@EnableRedisHttpSession
@Order(Ordered.HIGHEST_PRECEDENCE)
public class SessionConfig extends AbstractHttpSessionApplicationInitializer {
@Bean
public JedisConnectionFactory connectionFactory() {
JedisConnectionFactory jedisConFactory
= new JedisConnectionFactory();
jedisConFactory.setHostName("localhost");
jedisConFactory.setPort(6379);
jedisConFactory.setPassword("my_password_123");
return jedisConFactory;
}
}
Как мне сказать весеннему приложению B
выбрать сеанс из redis, используя JSESSIONID, который я передаю в запросе.
Пожалуйста, укажите.