如何在使用 Spring 会话的项目中设置忽略 URL
Posted
技术标签:
【中文标题】如何在使用 Spring 会话的项目中设置忽略 URL【英文标题】:How to set the ignoring URL in a project that uses spring session 【发布时间】:2021-08-21 05:50:08 【问题描述】:使用spring boot同时集成spring session和spring actuator。由于使用了prometheus监控,它会周期性的发起http请求进行健康检查和性能监控,但是每个请求都会产生一个新的会话,由于使用了会话共享。会话存储在redis中,会产生大量无用的会话。目前有没有更好的解决方案?
【问题讨论】:
【参考方案1】:我在github上发现了一个类似的问题,问题还是悬而未决,不过问题中已经有人提出了解决方案,链接如下:Is it possible to exclude some url from the SessionRepositoryFilter。
示例代码使用过滤器集SessionRepositoryFilter.FILTERED
。
@Component
@Order(Integer.MIN_VALUE)
public class ExcludeSessionRepositoryFilter extends OncePerRequestFilter
@Override
protected void doFilterInternal(HttpServletRequest httpRequest, HttpServletResponse httpResponse,
FilterChain filterChain) throws ServletException, IOException
if (/* here goes your logic to exclude the session repository filter, probably depending on the request uri */)
httpRequest.setAttribute("org.springframework.session.web.http.SessionRepositoryFilter.FILTERED", Boolean.TRUE);
filterChain.doFilter(httpRequest, httpResponse);
当然,还有另一种方案可以完成springboot和spring security的集成。集成完成后,由于SessionManagementConfigurer
的存在,可以调整SessionCreationPolicy enumeration parameters
,调整会话创建策略。它的默认值是SessionCreationPolicy.IF_REQUIRED
,只有经过测试登录后,session才会同步到redis,比较符合session共享的概念。
【讨论】:
以上是关于如何在使用 Spring 会话的项目中设置忽略 URL的主要内容,如果未能解决你的问题,请参考以下文章
Java中设置Session过期时间(Spring Boot)