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

Spring boot:如何跳过特定endpoint的basic-auth

殷耀
2023-03-14
import com.cellpointmobile.email.services.AuthenticationService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.dao.DaoAuthenticationProvider;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;

@Configuration
@EnableWebSecurity
public class EmailSecurityAdapter extends WebSecurityConfigurerAdapter {

    @Autowired
    AuthenticationService userDetailsService;

    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth.userDetailsService(userDetailsService);
        auth.authenticationProvider(authenticationProvider());
    }


@Override
public void configure(WebSecurity web) throws Exception {
    web
            .ignoring()
            .antMatchers("/healthCheck**");
}


@Override
protected void configure(HttpSecurity http) throws Exception {
    http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "**/heathCheck/*").permitAll()
            .anyRequest()
            .access("isFullyAuthenticated() and hasAnyRole('ROLE_ADMIN','ROLE_USER')")
            .and()
            .httpBasic();
}

    @Bean
    public PasswordEncoder passwordEncoder() {
        //https://www.browserling.com/tools/bcrypt
        return new BCryptPasswordEncoder();
    }

    @Bean
    public DaoAuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService);
        authenticationProvider.setPasswordEncoder(passwordEncoder());
        return authenticationProvider;
    }
}
<Map>
    <timestamp>2019-09-13</timestamp>
    <status>401</status>
    <error>Unauthorized</error>
    <message>Unauthorized</message>
    <path>/heathCheck</path>
</Map>

共有1个答案

田向荣
2023-03-14

使用

@Override
protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .antMatchers(HttpMethod.GET, "**/heathCheck/**").permitAll()
        .anyRequest()
        .access("isFullyAuthenticated() and hasAnyRole('ROLE_ADMIN','ROLE_USER')")
        .and()
        .httpBasic();
}

或者在configure(WebSecurity web)中使用web.Ilighing(),这将为特定于它的endpointingore所有安全筛选器。之后,可以将其从configure(HttpSecurity http)中删除,并将configure(WebSecurity web)保持在configure(HttpSecurity http)之上。

HttpSecurity与WebSecurity

 @Override
    public void configure(WebSecurity web) throws Exception {
        web
          .ignoring()
            .antMatchers(HttpMethod.yourMethod, "**/heathCheck/**");
    }
@Override
        public void configure(WebSecurity web) throws Exception {
            web
              .ignoring()
                .antMatchers(HttpMethod.yourMethod, "**/heathCheck/**");
        }

@Override
protected void configure(HttpSecurity http) throws Exception {
            http
            .csrf().disable()
            .authorizeRequests()
            .antMatchers(HttpMethod.GET, "**/heathCheck/*").permitAll()
            .anyRequest()
            .access("isFullyAuthenticated() and hasAnyRole('ROLE_ADMIN','ROLE_USER')");
}
 类似资料:
  • 我在gradle中使用flyway,我在数据库控制台中手动运行了其中一个迁移,我想运行flyway,但告诉它忽略所有其他迁移版本之间的一个特定迁移版本。可以这样做吗?

  • 所以我有 我读过Baeldung的文章和其他东西,但似乎我的选项是自定义类型(这是一个原始类型)或全局类型。如何实现这种自定义序列化?

  • 我有一个视图寻呼机,它的适配器上有片断列表。这就是我想要实现的场景: 假设我们有4个片段:Fragment1 Fragment2 Fragment3 Fragment4 我想在从Fragment4中滑动时跳过fragment3。 任何帮助都是非常感谢的。非常感谢你

  • 我想你可以想象家务控制器中有什么,但为了完整起见,这里有相关的部分: 下面是测试在输出中打印的请求: 那么,为什么我的测试会得到401的返回代码,我如何修复它?

  • 本文向大家介绍如何从Cucumber中执行跳过特定的测试方法?,包括了如何从Cucumber中执行跳过特定的测试方法?的使用技巧和注意事项,需要的朋友参考一下 借助功能文件中场景的标记,我们可以跳过在Cucumber中执行的特定测试方法。 示例 功能文件。 具有方案的特征文件,其中方案具有标签烟和付款。 示例 要跳过使用@Payment的方案,在Test Runner文件中,在@Payment标记