2013-07-04 3 views
2

У меня есть 2 контроллера:"Запрос метод 'POST' не поддерживается" после аннотации пут безопасности

)

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

б)

@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"; 
} 

Перед тем, как поместить аннотаций безопасности в Контроллер «b» все хорошо. Теперь, когда я перехожу на страницу контроллера «a», и я заполняю форму, нажмите кнопку, которая вызывает контроллер «b», и я получаю «HTTP Status 405 - метод запроса« POST »не поддерживается». Почему это происходит и как его исправить?

UPD: Я помог добавить в контроллер входа RequestMethod.POST

ответ

2

Это трудно отлаживать без конфигурации пружины безопасности, но я предполагаю, что, когда вы идете /portal/form.html весной перенаправляет вас на страницу входа в систему, используя HTTP POST, в то время как обработчик контроллера страницы входа отображается только в HTTP GET. Попробуйте сопоставить обработчик страницы входа в метод POST.

2

я случайно столкнулся с вашими описанными симптомами при переносе использования моего приложения на Spring Security 3.2.0.RELEASE от конфигурации XML на основе для -А конфигурации JavaConfig.

В моем конкретном случае, сообщение причиной HTTP Status 405 - Request method 'POST' not supported была активация по умолчанию Spring Security, защита CSRF при использовании JavaConfig -На конфигурации.

Чтобы удалить эту причину можно:

  • либо обновить приложение, чтобы следовать механизм защиты от CSRF Spring Security в
  • или отключить механизм защиты от CSRF Spring Security.

Чтобы отключить механизм защиты от CSRF, в WebSecurityConfigurer сделать что-то вроде следующего:

@Configuration 
@EnableWebSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

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

    // ... 
} 
+0

Спасибо так много. Я пробивал себе голову над тем же вопросом в течение последнего дня. – sandeepsharat

Смежные вопросы