У меня проблема с реализацией httpSession и spring redis. Я объявил фильтр, у которого есть одна работа. Поймайте параметр запроса и установите его в сессию. Этот атрибут используется позже для вызова внешнего API.
Моя реализация:
Я использую Spring-Boot
Я использую JedisConnectionFactory для сохранения моего сеанса в Reddis.
<dependency>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session-data-redis</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
<exclusions>
<exclusion>
<groupId>io.lettuce</groupId>
<artifactId>lettuce-core</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</dependency>
объявить хранилище использованиявведите redis to spring-boot
session:
store-type: redis
timeout: 900s
redis:
host: redis
port: 6379
теперь мой фильтр
@Component
@Slf4j
@Order(1)
public class MyCustomFilter implements Filter {
@Resource
private SessionHelper sessionHelper;
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
// retrieve site from request attribute
final String site = request.getParameter("site");
// persiste site into session with a bean scoped SESSION
sessionHelper.saveSite(site);
filterChain.doFilter(request, response);
}
}
мой sessionHelper
@Component
@Slf4j
@Scope(value = SCOPE_SESSION, proxyMode = TARGET_CLASS)
public class SessionHelper implements Serializable {
@Resource
private HttpSession httpSession;
public void saveSite(String site) {
httpSession.setAttribute("site", site);
}
public String getSite(String site) {
return (String) httpSession.getAttribute("site");
}
}
мой сервис, которому нужно получить сайт из сеанса
@Slf4j
@Component
public class MyFacade {
@Resource
private SessionHelper sessionHelper;
public void myMethod() {
log.debug(sessionHelper.getSite());
}
}
результат, мой журнал фасадов всегда нулевой. Так что я не понимаю почему. Мой фильтр установил эту переменную в сеанс.
Я попытался записать sessionId на тот момент, когда переменная установлена и когда она получена. Идентификатор сессии отличается ... и я не понимаю, почему.
, если кто-то знает за меня ...
thx