У меня есть какой-то контроллер:Secure RESTful веб-метод в Spring MVC
@Controller
public class DefaultController {
@RequestMapping(value="/index.html", method=RequestMethod.GET)
public String indexView(){
return "index";
}
@RequestMapping(value="/some.action", method=RequestMethod.POST)
@ResponseBody
public MyObject indexView(some parametrs....){
MyObject o= daoService.getO(id);
return o;
}
}
Я использую Spring Security:
<security:global-method-security secured-annotations="enabled" />
<security:http auto-config="true" access-denied-page="/accessDenied.jsp">
<security:form-login login-page="/login.html" login-processing-url="/login" authentication-failure-url="/login.html?login_error=1" default-target-url="/"/>
<security:http-basic/>
<security:intercept-url pattern='/**' access='ROLE_USER' />
<security:logout logout-url="/logout" logout-success-url="/"/>
<security:remember-me services-ref="rememberMeServices"/>
</security:http>
Теперь моя проблема заключается в следующем го:
при доступе /some.action с использованием AJAX без аутентифицированного пользователя Spring Security возвращает команду 301 (перенаправление на страницу отказа от доступа).
Что мне нужно, даже если пользователь не прошел аутентификацию, чтобы вернуть 200 OK и отправить сообщение об ошибке проверки подлинности клиенту или событию или в худшем случае, чтобы вернуть ошибку 400.
Я понимаю, что мне нужно создать собственный обработчик успеха проверки подлинности, но могу ли я это сделать и как я могу применить этот обработчик к URI * .action?
btw wouldnt 401 будет правильным кодом для возврата? http://stackoverflow.com/questions/3297048/403-forbidden-vs-401-unauthorized-http-responses – flurdy
@flurdy, да 401 имеет смысл. –
это может помочь http://www.byteclip.com/spring-security-post-authentication-logic/, таким образом вы можете изменить код ответа HTTP –