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

Spring Security——执行器endpoint的自定义身份验证提供程序和HTTP Basic

龚鸿羽
2023-03-14

我有一个正在运行的Spring Boot应用程序(Spring Boot v2.4.1),我想用Spring Boot Admin监控它。

我已经安装了服务器,可以在/actuator/endpoint不安全的情况下监视应用程序的实例。我有一张照片在上面。

现在我想保护它,但我不知道如何在不干扰我当前安全配置的情况下做到这一点。

我将Spring Security配置为匹配数据库中的用户名和密码以及CustomAuthenticationProvider。如果可能,我想添加一个具有HTTP基本身份验证的执行器endpoint。

这是我当前的安全配置:

http.
            authorizeRequests()
            .antMatchers("/admin/**").hasAuthority(AUTHORITY_ADMIN)
            .antMatchers("/user/**").hasAnyAuthority(AUTHORITY_ADMIN, AUTHORITY_USER)
            .anyRequest().authenticated()
            .and()
            .csrf().disable()
            .formLogin()
            .loginPage("/login")
            .failureUrl("/login?error=true")
            .successHandler(new CustomUrlAuthenticationSuccessHandler(translator))
            .usernameParameter("username")
            .passwordParameter("password")
            .and()
            .logout()
            .logoutUrl("/logout")
            .logoutSuccessUrl("/")
            .and()
            .exceptionHandling().accessDeniedPage("/403")
            .and()
            .headers().frameOptions().sameOrigin();

我想保留该配置,并告诉Spring,每当用户点击 /actuator/endpoint时,它将需要HTTP Basic Security凭据。

我在考虑有两个@Configuration类,扩展WebSecurityConfigrerAdapter。一个是我已经得到的,另一个用于执行器endpoint。但是我运气不好。

非常感谢。

非常感谢你

共有2个答案

徐昕
2023-03-14

我就是这样解决的:我创建了一个新的@configurationon类,扩展websecurityConfigureAdapter

我无法停止使用WebSecurityConfigureAdapter(正如@Marcus Hert da Coregio在评论中所建议的那样),因为如果我不扩展它,我就无法定义我的自定义身份验证提供程序

这个类有@Order(1),因此它将优先于我的其他初始配置(我将其设置为@Order(2))。这就是它的内容:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .antMatcher("/actuator/**")
                .csrf().disable()
                .authorizeRequests()
                    .anyRequest().authenticated()
                .and()
                .httpBasic()
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

然后,我的自定义AuthenticationProvider将验证访问致动器endpoint的给定凭据是否有效。

这失败的原因第一次我测试它是因为我没有设置初始

.antMatcher("/actuator/**")

通过添加它,我告诉SpringSecurity这个配置应该只应用于那些endpoint。我从这篇文章中得到了这个概念

我希望这对将来的人有所帮助

范瀚昂
2023-03-14

您可以创建两个SecurityFilterChainbean,一个用于具有更高优先级的/执行器/**endpoint,另一个用于具有较低优先级的其他endpoint,如下所示:

@Bean
@Order(1)
public SecurityFilterChain actuatorWebSecurity(HttpSecurity http) throws Exception {
    http.requestMatchers((matchers) -> matchers
        .antMatchers("/actuator/**"));
    http.authorizeRequests((authz) -> authz
        .anyRequest().authenticated());
    http.httpBasic();
    http.userDetailsService(myUserDetailsService);
    ...
    return http.build();
}

@Bean
@Order(2)
public SecurityFilterChain defaultWebSecurity(HttpSecurity http) throws Exception {
    // your current configuration
}

在这种配置中,@Order注释告诉顺序,SecurityFilterChains将根据请求进行匹配。

 类似资料:
  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 我们有一个spring boot应用程序(spring boot 2.1.4版),它公开了一个用Oauth2保护的Rest API。 我们还需要将spring boot提供的健康检查(致动器)endpoint公开给一个只支持基本身份验证的遗留监控工具。 但是,由于spring boot 2与常规应用程序安全规则共享安全配置,所以到目前为止我能看到的唯一选项是用Oauth2保护它或者不保护它()。

  • 我正在将应用程序的安全性迁移到Spring Security4.0。我的要求是身份验证应该是JAAS身份验证,自动化数据将从数据库中提取。所以我已经编写和自定义了身份验证提供程序。但我的问题是Spring没有将身份验证请求委托给我的自定义身份验证提供程序。 代码如下 web.xml条目 调用堆栈

  • 如何通过使用Spring Security和Java配置来定义自定义身份验证提供程序?我想在我自己的数据库上执行一个登录检查凭据。

  • 我想为Spring Security配置L 我配置spring-security.xml指出m 如何设置为 Spring,使用我的自定义类而不是他的 deafaul LDAP 身份验证提供程序?

  • 在我的firebase应用程序中,用户可以使用 Google(Firebase的联邦提供商)或 Slack(作为自定义身份验证提供程序实现) 我想给用户链接两个帐户的机会。所以我要开的案子是: 用户使用Google登录 用户转到“设置”并单击“使用松弛连接” 然后应该链接用户帐户,以便他下次可以使用Slack或Google登录 我现在想知道,我是否可以通过某种方式从我的自定义松弛身份验证获得一个A