如何从 springSessionRepositoryFilter 中排除资源?

Posted

技术标签:

【中文标题】如何从 springSessionRepositoryFilter 中排除资源?【英文标题】:How to exclude resources from springSessionRepositoryFilter? 【发布时间】:2017-05-28 20:51:53 【问题描述】:

我们正在尝试将旧项目转换为更现代的项目。这是一个基于 servlet 的带有 jsp 的应用程序,我们正朝着 Spring 发展。我们服务于 jsp-s,它们包含许多静态资源。 我们使用 Redis 作为会话存储,它像过滤器一样映射:

<filter>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSessionRepositoryFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

...

@Configuration
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = SpringSessionConfig.MAX_INACTIVE_INTERVAL_IN_SECONDS)
@PropertySource(value = "classpath:redis.properties")
public class SpringSessionConfig  ... 

静态资源分布在许多不同的目录中,问题是,这个过滤器对每个资源都运行,这是完全可以理解的。

有没有一种聪明的方法可以从这个 url 模式中排除资源?或者这个 RepositoryFilter 的一些配置?

我想出的唯一解决方案是进行大重构,并为静态资源创建适当的命名空间,但现在,这太费力了。

我还在 Spring 配置中添加了资源处理程序,但这里忽略了它。

【问题讨论】:

【参考方案1】:

我认为您可以扩展springSessionRepositoryFilter 来实现自己的过滤器,然后在您的doFilterInternal 方法中执行排除资源,并配置springSessionRepositoryFilter bean 手册而不是EnableRedisHttpSession 注释,然后配置过滤器bean 名称添加到您的 web.xml。

【讨论】:

谢谢,我也去看看。现在我正在尝试与 FilterChainProxy 类似的东西。在这里找到:github.com/spring-projects/spring-session/issues/278 是的,您也可以这样做,将过滤器放入过滤器链中。然后使用spring安全请求匹配

以上是关于如何从 springSessionRepositoryFilter 中排除资源?的主要内容,如果未能解决你的问题,请参考以下文章

如何将数据从回收器适配器发送到片段 |如何从 recyclerview 适配器调用片段函数

如何从 Firebase 获取所有设备令牌?

如何直接从类调用从接口继承的方法?

如何从服务器获取和设置 android 中的 API(从服务器获取 int 值)?如何绑定和实现这个

如何从Mac从android studio中的fabric注销? [复制]

如何从设备中获取 PDF 文件以便能够从我的应用程序中上传?