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

Isu keizinan berasaskan peranan Spring Security: 403 Ralat terlarang

PHPz
Lepaskan: 2024-02-09 11:21:08
ke hadapan
736 orang telah melayarinya

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
}
Salin selepas log masuk

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();
}
Salin selepas log masuk

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 (一个使用另一个声明作为权限源),或者切换到完全不同的 Converter<Jwt,?使用 <code>http.oauth2ResourceServer 扩展 AbstractAuthenticationToken>(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!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan