Metode permintaan 'POST' tidak didukung setelah anotasi keamanan dimasukkan

Saya memiliki 2 pengontrol:

a)

@Override
@RequestMapping(value = "/portal/form.html", method = RequestMethod.GET)
@Transactional
public String form(final Message message, final Model model) {
    return "portal/form";
}

b)

@Override
@RequestMapping(value = "/portal/form.html", method = RequestMethod.POST)
@Transactional
@PreAuthorize("#message.id!=null ? hasPermission(#message, 'WRITE') : hasRole('ROLE_ADMIN')") 
public String form(@Valid final Message message, final Model model) {
    if (message.getId() == null) {
        someService.save(message);
        AclManager.create(message);
    } else {
        someService.update(message);
        AclManager.update(message);
    }
    return "redirect:result.html";
}

Sebelum saya memberi anotasi keamanan di Kontroler "b" semuanya baik-baik saja. Sekarang ketika saya pergi ke halaman pengontrol "a" dan saya mengisi formulir, klik tombol yang menyebabkan pengontrol "b" dan saya mendapatkan "Status HTTP 405 - Metode permintaan 'POST' tidak didukung". Mengapa ini terjadi dan bagaimana cara memperbaikinya?

UPD: Saya membantu menambahkan pengontrol login RequestMethod.POST


person Amfion    schedule 04.07.2013    source sumber


Jawaban (2)


Sulit untuk melakukan debug tanpa konfigurasi keamanan pegas Anda, tapi saya kira ketika Anda membuka /portal/form.html pegas mengarahkan Anda ke halaman login menggunakan HTTP POST sementara pengendali pengontrol halaman login Anda hanya dipetakan ke HTTP GET. Coba petakan pengendali halaman login ke metode POST.

person gerrytan    schedule 05.07.2013

Saya juga kebetulan mengalami gejala yang Anda jelaskan saat memigrasikan penggunaan Spring Security 3.2.0.RELEASE aplikasi saya dari konfigurasi berbasis XML ke konfigurasi berbasis JavaConfig.

Dalam kasus khusus saya, penyebab pesan HTTP Status 405 - Request method 'POST' not supported adalah aktivasi default perlindungan CSRF Spring Security saat menggunakan konfigurasi berbasis JavaConfig.

Untuk menghilangkan penyebab ini, seseorang dapat:

  • perbarui aplikasi untuk mengikuti mekanisme perlindungan CSRF Spring Security
  • atau nonaktifkan mekanisme perlindungan CSRF Spring Security.

Untuk menonaktifkan mekanisme perlindungan CSRF, di WebSecurityConfigurer lakukan hal seperti berikut:

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .csrf()
                .disable() //FIXME
            .authorizeRequests() ....
    }

    // ...
}
person Abdull    schedule 21.02.2014
comment
Terima kasih banyak. Saya telah memikirkan masalah yang sama selama satu hari terakhir. - person sandeepsharat; 04.03.2016