限制创建没有主体的会话
Restrict creation of Sessions which do not have principal
我正在使用 Spring 会话和 JDBC,它工作正常。但是有许多会话是在没有委托人的情况下创建的。
即使是一个简单的 curl 请求也会在数据库中创建一个新的会话条目。
我们可以限制没有主体的会话的创建吗?
这里的principal指的是登录用户
示例数据库数据:
SESSION_ID| CREATION_TIME| LAST_ACCESS_TIME | MAX_INACTIVE_INTERVAL | PRINCIPAL_NAME
| 0112a88c | 1567062697443 | 1567062697443 | 43200 | abc@gmail.com
| 0123f31e | 1567063051563 | 1567063051563 | 43200 | NULL
更新:这些会话是为状态 api 呼叫创建的。
设置 SessionCreationPolicy 无效。我通过引入过滤器解决了这个问题。
@Component
public class ExcludeSessionRepositoryFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpRequest, HttpServletResponse httpResponse,
FilterChain filterChain) throws ServletException, IOException {
httpRequest.setAttribute("org.springframework.session.web.http.SessionRepositoryFilter.FILTERED", Boolean.TRUE);
filterChain.doFilter(httpRequest, httpResponse);
}
}
我将使用以下代码排除自定义 api 的会话创建。这不会在 SPRING_SESSION table.
中创建虚拟会话
@Bean
public FilterRegistrationBean sessionExclusionFilterRegBean(ExcludeSessionRepositoryFilter excludeSessionRepositoryFilter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(excludeSessionRepositoryFilter);
registrationBean.setOrder(Integer.MIN_VALUE);
registrationBean.addUrlPatterns("/hello", "/status");
return registrationBean;
}
我正在使用 Spring 会话和 JDBC,它工作正常。但是有许多会话是在没有委托人的情况下创建的。 即使是一个简单的 curl 请求也会在数据库中创建一个新的会话条目。
我们可以限制没有主体的会话的创建吗?
这里的principal指的是登录用户
示例数据库数据:
SESSION_ID| CREATION_TIME| LAST_ACCESS_TIME | MAX_INACTIVE_INTERVAL | PRINCIPAL_NAME
| 0112a88c | 1567062697443 | 1567062697443 | 43200 | abc@gmail.com
| 0123f31e | 1567063051563 | 1567063051563 | 43200 | NULL
更新:这些会话是为状态 api 呼叫创建的。
设置 SessionCreationPolicy 无效。我通过引入过滤器解决了这个问题。
@Component
public class ExcludeSessionRepositoryFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest httpRequest, HttpServletResponse httpResponse,
FilterChain filterChain) throws ServletException, IOException {
httpRequest.setAttribute("org.springframework.session.web.http.SessionRepositoryFilter.FILTERED", Boolean.TRUE);
filterChain.doFilter(httpRequest, httpResponse);
}
}
我将使用以下代码排除自定义 api 的会话创建。这不会在 SPRING_SESSION table.
中创建虚拟会话@Bean
public FilterRegistrationBean sessionExclusionFilterRegBean(ExcludeSessionRepositoryFilter excludeSessionRepositoryFilter) {
FilterRegistrationBean registrationBean = new FilterRegistrationBean(excludeSessionRepositoryFilter);
registrationBean.setOrder(Integer.MIN_VALUE);
registrationBean.addUrlPatterns("/hello", "/status");
return registrationBean;
}