gpt4 book ai didi

java - 使用 spring-boot 对相同 URL 进行不同的身份验证方式

转载 作者:行者123 更新时间:2023-12-01 14:35:32 26 4
gpt4 key购买 nike

我正在开发一个由注释配置的 Spring Boot Web 应用程序项目。我成功配置了 spring-security 以在某些 URL 上添加基本身份验证,并在其他一些 URL 上添加 sso。
但实际上我必须修改该行为以实现此目的:

我所有的 URL 都受这两种身份验证方法的保护,要确定使用方式,我必须阅读请求的 header :如果有 ppauth token ,我将尝试 sso 身份验证,如果我有 Authoriation: Basic header ,我将尝试基本认证。在另一种情况下,身份验证失败。

在 spring boot 文档中的例子非常简单,它展示了 WebSecurityConfigurerAdapter 的用法,实际上我们可以通过不同的 URL 模式确定身份验证方法,但不能通过其他谓词(如 headers)来确定身份验证方法。

有人有想法吗?

最佳答案

最后我得到了解决这个问题的方法,所以我将简要分享一下:

所以我们有多种认证方式,在几个扩展AbstractPreAuthenticatedProcessingFilter的类中描述. (所有这些都不会添加到过滤器链中)

最重要的是,我们得到了 MultiAuthModeSecurityFilter ,这个类将被添加到应用程序的过滤器链中:

里面configure WebSecurityConfigurerAdapter 的方法

http.addFilterBefore(new MultiAuthModeSecurityFilter(
FirstSecurityFilter(),
SecondSecurityFilter(),
ThirdSecurityFilter()), RequestCacheAwareFilter.class);

所以 MultiAuthModeSecurityFilter了解我们所有的安全策略,并将请求发送到正确的过滤器:
    @Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
/*some actions to define the right authMethod to use*/
switch (authMethod) {
case FIRST:
firstFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
case SECOND:
secondFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
case THIRD:
thirdFilter.doFilter(servletRequest, servletResponse, filterChain);
break;
default:
/* throws exception */ break;
}
}

希望对你有帮助 !

关于java - 使用 spring-boot 对相同 URL 进行不同的身份验证方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28062669/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com