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

使用Spring Security控制Spring Boot应用程序中非安全过滤器的顺序

韩琛
2023-03-14

这里是Java Spring Boot。我正在构建一个RESTful web服务,它使用Spring Security进行身份验证/授权。

Spring Security附带了大量自己灵活且可配置的过滤器。但是,我的服务需要定义几个自己的筛选器:

  • 它们与安全性完全无关,因此不需要在Spring Security的API中进行任何配置;和
  • 我确实希望在Spring Security已经允许通过其自己的所有安全过滤器请求后调用它们;这意味着这些“非安全”过滤器只有在Spring Security提前允许请求通过时才会被调用

我看到这个答案以及这个答案,但这两个都涉及配置其他自定义安全过滤器以与Spring Security的内置过滤器一起使用。如何配置Spring Boot以“定位”我的非安全过滤器“之后”(在过滤器链的更下方)从Spring Security?一旦我这样做,我该如何控制这些过滤器的顺序?

共有1个答案

从阎宝
2023-03-14

您可以使用@Order注释设置过滤器的顺序。它有默认值< code>Integer。MAX_VALUE这样,您的过滤器将最后执行(较低的值具有较高的优先级)。这里有一个例子:

@Order
@Component
public class TestFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

Spring Security是一个单独的物理< code >过滤器,但是将处理委托给一系列内部过滤器,例如:SecurityContextPersistenceFilter、RememberMeAuthenticationFilter、AnonymousAuthenticationFilter等。安全过滤器安装在由SecurityProperties定义的位置。DEFAULT_FILTER_ORDER设置为< code>-100。因此,任何阶数高于< code>-100的过滤器都将在FilterChainProxy(Spring Security过滤器的具体类)之后执行

例如:

@Order(SecurityProperties.DEFAULT_FILTER_ORDER-1)
@Component
public class BeforeSecurityFilter implements Filter

将在安全过滤器之前执行,并且:

@Order(SecurityProperties.DEFAULT_FILTER_ORDER+1)
@Component
public class AfterSecurityFilter implements Filter

将在安全过滤器之后执行

 类似资料:
  • 我的SpringBoot应用程序中有一个控制器: 我想在mocks的帮助下,将其与服务分开进行测试。如何实施?

  • 本文向大家介绍如何使用SpringSecurity保护程序安全,包括了如何使用SpringSecurity保护程序安全的使用技巧和注意事项,需要的朋友参考一下 首先,引入依赖: 引入此依赖之后,你的web程序将拥有以下功能: 所有请求路径都需要认证 不需要特定的角色和权限 没有登录页面,使用HTTP基本身份认证 只有一个用户,名称为user 配置SpringSecurity springsecur

  • 我有一个springboot应用程序,它根据LDAP验证身份验证。我通过邮递员测试了它,它工作得很好。我扩展了WebSecurityConfigurerAdapter以根据LDAP验证登录凭据。这是工作很好,没有任何问题。我有一个angular前端,我调用/login,并将用户名和密码发送到它。它没有工作,我得到一个CORs错误。我将下面的代码添加到application.java中,我再也看不到

  • 问题内容: 我写了一个过滤器函数,它将根据您传递的参数返回数据。我希望控制器具有相同的功能。是否可以在控制器中重用过滤器功能? 到目前为止,这是我尝试过的: 问题答案: 将 $ filter 注入控制器 然后,无论您想在哪里使用该过滤器,都可以像这样使用它: 如果要将参数传递给该过滤器,请使用单独的括号进行处理: 您要过滤的数组在哪里,并且是用于过滤的对象。

  • 如何在Spring启动中指定过滤器的顺序?我需要在Spring Security过滤器之后插入我的MDC过滤器。我几乎尝试了一切,但我的过滤器总是第一位的。这不起作用: 这也不管用:

  • 问题内容: 假设我的web.xml中有以下内容 如果请求以/XYZ/abc.do的形式出现,过滤器的调用顺序是什么?为什么? 问题答案: 按照其映射在web.xml中定义的顺序 如果使用注释(),则顺序似乎未定义 -您仍必须在web.xml中声明条目。