当前位置: 首页 > 知识库问答 >
问题:

插入Spring-安全过滤器明显破坏过滤器链

訾旭
2023-03-14
public class SessionFilter extends GenericFilterBean {

    @Override
    public void doFilter(
        ServletRequest servletRequest,
        ServletResponse servletResponse,
        FilterChain filterChain
    ) throws IOException, ServletException {

        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        String authorizationHeader = httpRequest.getHeader(HttpHeaders.AUTHORIZATION);
        
        if (authorizationHeader != null && meetsCondition(authorizationHeader)) {
            SecurityContext sc = SecurityContextHolder.getContext();
            sc.setAuthentication(new CustomAuthentication(authorizationHeader));
            httpRequest.getSession(true)
                    .setAttribute(SPRING_SECURITY_CONTEXT_KEY, sc);
        }

        filterChain.doFilter(servletRequest, servletResponse);
    }
}
        http  //...
                .and().csrf().disable()
                .addFilterBefore(
                        new SessionFilter(),
                        SecurityContextPersistenceFilter.class
                 );

我的代码/理解所基于的来源:

  • https://www.leafyjava.com/2018/10/overwriting-spring-security-context.html
  • https://www.baeldung.com/spring-security-registrated-filters
  • https://spring.io/guides/topicals/spring-security-architecture

共有1个答案

闽焕
2023-03-14

我看不出过滤器有什么特别独特或奇怪的地方,所以问题可能不是过滤器本身,而是配置的其他部分。我只有几个笔记

>

  • 在放入这个自定义类之前,您是否已经确认OAuth2筛选器工作正常?您是手动添加的还是使用@EnableResourceServer注释添加的?

    我注意到您使用GenericFilterBean并手动添加它。我认为Spring Security会自动扫描GenericFilterBeans并将其添加到筛选器链中,这样它可能会在您的链中出现两次。

  •  类似资料:
    • 我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零 我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序

    • 我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但

    • 在内部,如果出现任何异常,将被重定向&这不需要通过,可以跳过此请求。 我已经实现了OncePerRequestFilter&任何请求都不会调用它。这必须在OAuth过滤器之前调用。 让我知道这个安全配置出了什么问题。

    • 丰富的过滤器插件的存在是 logstash 威力如此强大的重要因素。名为过滤器,其实提供的不单单是过滤的功能。在本章我们就会重点介绍几个插件,它们扩展了进入过滤器的原始数据,进行复杂的逻辑处理,甚至可以无中生有的添加新的 logstash 事件到后续的流程中去!

    • 问题内容: 我目前正在网站上,遇到这种奇怪的行为。我不确定这是一个错误还是如何解决它,所以我想向您寻求帮助。 因此,我有这个标题屏幕的“动画”,该标题的标题位于全屏页面的中央,当您向下滚动时,标题变小并保留在页面顶部。这是一个具有预期行为的工作示例,从中我剥离了所有不必要的代码以使其最小化: 接下来是完全相同的代码段,但有一个附加代码段:我应用了一个过滤器,就我而言,这纯粹是装饰性的:。 正如您在

    • 注意:我在Chrome应用程序中使用来自webview的YouTubeIframe。 这是YouTube的API声明: videoSyndicated参数允许您将搜索限制为只能在youtube.com以外播放的视频。如果为此参数指定值,还必须将type参数的值设置为video。 videoLicense参数过滤搜索结果,以仅包括具有特定许可证的视频。YouTube允许视频上传者选择将知识共享许可或

    • 过滤器是 控制器动作 执行之前或之后执行的对象。 例如访问控制过滤器可在动作执行之前来控制特殊终端用户是否有权限执行动作, 内容压缩过滤器可在动作执行之后发给终端用户之前压缩响应内容。 过滤器可包含预过滤(过滤逻辑在动作之前)或后过滤(过滤逻辑在动作之后), 也可同时包含两者。 使用过滤器 过滤器本质上是一类特殊的 行为, 所以使用过滤器和 使用行为一样。 可以在控制器类中覆盖它的 behavio