양식을 수락하는 컨트롤러가 있습니다. POST
. 컨트롤러의이 메소드/액션은 Spring Security에 의해 보호됩니다. 이 경우 사용자의 세션이 만료되었으며 제출 버튼을 클릭합니다.Grails & Spring Security - 저장된 요청 - 빈 매개 변수 및 언 바운드 명령 객체
스프링 보안은 저장된 요청을 생성하고 사용자를 로그인 페이지로 리디렉션합니다. 로그인시 스프링 시큐리티는 양식의 POST
URL로 리디렉션하고 있습니다. 그러나 제어기 메소드/조치 내의 매개 변수는 비어 있으며 (제어기 및 조치 이름 제외) 명령 오브젝트는 채워지지 않습니다.
onInteractiveAuthenticationEvent
내의 간단한 코드를 사용하면 저장된 요청에 매개 변수 맵의 모든 매개 변수가 있음을 알 수 있습니다.
grails.plugins.springsecurity.onInteractiveAuthenticationSuccessEvent = { e, appCtx ->
def request = org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder.getRequest()
def response = org.codehaus.groovy.grails.plugins.springsecurity.SecurityRequestHolder.getResponse()
org.springframework.security.web.savedrequest.SavedRequest savedRequest = new org.springframework.security.web.savedrequest.HttpSessionRequestCache().getRequest(request, response);
println savedRequest
if (savedRequest) {
savedRequest.getParameterMap().each { k, v ->
println "${k}: ${v}"
}
}
}
컨트롤러 작업/메소드에 대한 params 및 command 객체가 비어 있고 언 바운드 된 이유는 무엇입니까? 로그인 성공 후 저장된 요청은 두 매개 변수를 채우고 차례대로 매개 변수에 바인딩하는 데 사용됩니다.
Grails 2.0.4, Spring Security Core Plugin 1.2.7.3 및 Grails 2.4.2와 Spring Security Core Plugin 2.0-RC3에서 테스트했습니다.
명령 개체는 현재 요청에있는 것만 포함하여 채워집니다. Spring 보안이 저장된 요청으로 무엇을하는지는 모르지만 리다이렉션을 시작할 때 재사용을 위해 요청 매개 변수를 검색하지 않는 것 같습니다. –
@JeffScottBrown 동의하고 그게 문제입니다. Spring Security에 대한 나의 이해를 바탕으로해야 할 것 같습니다. 필자는 Spring Security와 Grails 플러그인을 분리하여 누군가가 다른 방향으로 나를 가리킬 수 없다면 왜 이런 일이 일어나지 않는지 알 수있을 것입니다 (나는 기대하고있었습니다). –
여기에도 같은 문제가 있습니다. https://jira.grails.org/browse/GPSPRINGSECURITYCORE-297 –