Rumah >Java >Isu keizinan berasaskan peranan Spring Security: 403 Ralat terlarang

Isu keizinan berasaskan peranan Spring Security: 403 Ralat terlarang

PHPz
PHPzke hadapan
2024-02-09 11:21:08720semak imbas

Spring Security ialah rangka kerja keselamatan yang berkuasa untuk melindungi aplikasi daripada serangan berniat jahat. Apabila menggunakan Spring Security, isu keizinan peranan boleh menyebabkan ralat 403 Forbidden. Editor PHP Banana memperkenalkan masalah ini kepada anda secara terperinci dan menyediakan penyelesaian untuk membantu anda berjaya menyelesaikan masalah kebenaran peranan. Sama ada anda seorang pemula atau pembangun berpengalaman, artikel ini akan membantu anda memahami dengan mendalam mekanisme kebenaran peranan Spring Security dan belajar mengendalikan ralat 403 Forbidden dengan betul.

Isi soalan

Soalan:

Saya cuba mencipta pelayan web berasaskan musim bunga dengan pengesahan berasaskan peranan tetapi saya terus mendapat ralat terlarang 403. Saya telah melaksanakan kelas userdetails tersuai dan saya mengesyaki mungkin terdapat masalah dengan konfigurasi saya.

Kod:

Penyesuaian userdetails:

public class customuserdetails implements userdetails {
    private static final long serialversionuid = 1l;
    private final user user;

    public customuserdetails(user user) {
        this.user = user;
    }

    @override
    public collection<? extends grantedauthority> getauthorities() {
        return user.getroles().stream().map(r -> new simplegrantedauthority("role_" + r.getname())).tolist();
    }

    // ... other userdetails methods
}

securityfilterchain Perlaksanaan:

@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
    return http
        .csrf(csrf -> csrf.disable())
        .sessionManagement(sess -> sess.sessionCreationPolicy(SessionCreationPolicy.STATELESS))
        .authorizeHttpRequests(requests -> requests
            .requestMatchers("/api/**").permitAll()
            .requestMatchers("/secret/**").hasAuthority("USER")
            .anyRequest().authenticated())
        .oauth2ResourceServer(oauth2 -> oauth2.jwt(Customizer.withDefaults()))
        .addFilterBefore(authorizeFilter, UsernamePasswordAuthenticationFilter.class)
        .build();
}

Saya telah melaksanakan kelas userdetails 类并配置了 spring security 以进行基于角色的身份验证。但是,即使我相信角色已正确分配,我仍然遇到 403 forbidden 错误。我尝试同时使用 hasrolehasauthority tersuai dan mengkonfigurasikan keselamatan spring untuk pengesahan berasaskan peranan. Walau bagaimanapun, walaupun saya percaya peranan diberikan dengan betul, saya masih mendapat ralat terlarang 403. Saya cuba menggunakan kedua-dua hasrole dan hasauthority tetapi masalah berterusan. Apa yang tiada dalam konfigurasi saya?

Sebarang pandangan atau cadangan akan sangat dihargai. Terima kasih!

Penyelesaian

Untuk pelayan sumber dengan JWT, kebenaran ditetapkan oleh penukar pengesahan.

Penukar pengesahan lalai ialah JwtAuthenticarionConverter,它将权限转换委托给可配置的权限转换器(默认使用 scope 声明中的条目添加 SCOPE_ awalan).

Anda boleh menyediakan satu yang dikonfigurasikan dengan penukar kebenaran yang lain JwtAuthenticationConverter (一个使用另一个声明作为权限源),或者切换到完全不同的 Converterd5f3c2e320864c54a83e1ef7cadf1add(oauth2-> oauth2.jwt(Jwt -> jwt.jwtAuthenticationConverter(...))

Anda juga boleh mempertimbangkan pemula tambahan ini Saya mengekalkannya menggunakan sifat aplikasi penukar kebenaran boleh dikonfigurasikan (melainkan anda memberikan kebenaran atau penukar pengesahan anda sendiri dalam conf)

Anda boleh cuba membuka log TRACE spring dan ketahui di mana masalahnya berlaku. Cadangan ini mungkin tidak membantu anda secara langsung, tetapi ia membantu kami mencari sebab mengapa API mengembalikan 403 apabila berhijrah ke Springboot3.0

Atas ialah kandungan terperinci Isu keizinan berasaskan peranan Spring Security: 403 Ralat terlarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam