Keamanan pegas memberikan 401 pada semua titik akhir api

Saya telah melihat banyak postingan tentang masalah yang sama, tetapi tidak ada solusi yang berhasil untuk saya.

Saya memiliki API yang diamankan dengan keamanan pegas seperti di bawah ini.

@EnableWebSecurity
@Component
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired private UserService userService;

    public SecurityConfiguration() {
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/actuator/shutdown", "/api/register");
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
        .csrf().disable()
        .authorizeRequests()
        .anyRequest().authenticated()
        .and().httpBasic();
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth
        .userDetailsService(userService)
        .passwordEncoder(passwordEncoder());
    }

    @Bean
    public PasswordEncoder passwordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

Saya memerlukan titik akhir /api/register dan /actuator/shutdown tersedia tanpa otentikasi. Namun, ternyata, semua titik akhir mengembalikan kode status 401 yang sama.


person Karthik Chennupati    schedule 15.07.2020    source sumber


Jawaban (2)


coba dengan ini.

 protected void configure(HttpSecurity httpSecurity) throws Exception {
  httpSecurity
        //no authentication needed for these context paths
        .authorizeRequests()
        .antMatchers("/your Urls that dosen't need security/**").permitAll()
person Supun Dharmarathne    schedule 15.07.2020
comment
Terima kasih untuk bantuannya. Tapi, itu masih memberi 401 - person Karthik Chennupati; 15.07.2020
comment
Maaf! Saya menambahkan antMatcher ke pernyataan yang ada alih-alih menggantinya dengan pernyataan Anda. Ini berfungsi sekarang. Namun, karena csrf tidak dinonaktifkan sekarang, ia memberikan 403 alih-alih 401 untuk akses tanpa autentikasi - person Karthik Chennupati; 15.07.2020

Kami menerapkan pendekatan serupa seperti yang disebutkan oleh Supun Di Atas,

http
.authorizeRequests()
.antMatchers(AUTH_WHITELIST).permitAll()
.anyRequest().authenticated()
.and().httpBasic()

Anda dapat mempertahankan 'AUTH_WHITELIST' seperti di bawah ini untuk terus menambahkan beberapa Titik Akhir

private static final String[] AUTH_WHITELIST = {
        // -- swagger ui
        "/api/register",
        "/actuator/shutdown"
};
person Nagesh Tripathi    schedule 15.07.2020
comment
Ini berfungsi, tetapi karena csrf tidak dinonaktifkan, ia memberikan 403 alih-alih 401 untuk akses tanpa autentikasi - person Karthik Chennupati; 15.07.2020
comment
ya Anda harus menangani csrf, periksa tautan ini jika itu membantu stackoverflow.com/questions/40929943/spring-boot -csrf - person Nagesh Tripathi; 15.07.2020