2012-04-19 3 views
3

내 앱에서받은 권한이없는 요청을 기록하고 싶습니다. Shiro 플러그인이 HTTP 리디렉션을 사용하여 사용자를 auth/unauthorized으로 보내므로 요청 객체는 새로운 것으로 원래 URL을 얻을 수 없습니다. 컨트롤러/액션 이름; 또는 매개 변수를 요청하십시오.Shiro Grails 플러그인으로 권한이없는 요청의 URL (또는 컨트롤러 및 작업 이름)을 확인하십시오.

AuthController 무단 조치 내에서 원래 URL 또는 컨트롤러 이름과 액션 이름 (가능한 경우 매개 변수 요청)을 확인하는 방법이 있습니까?

나는 http://plugins.grails.org/grails-shiro/tags/RELEASE_1_1_3/ShiroGrailsPlugin.groovy을 플러그인 출처의 참고 자료로보고 있습니다.

세부 사항 :
Grails를 1.3.7
시로 Grails의 플러그인 1.1.3

답변

2

나는 같은 문제가 있었다 ... 내 솔루션은 완벽하지 않습니다 :

브라우저가 소위 리퍼러가에 전송 그러나 대부분의 브라우저가 보내 - 당신이

request?.getHeader('Referer') 

을 통해 얻을 수 있습니다하지만 리퍼러가 정말 신뢰할 수있는 아무것도 헤더 중 하나.

다른 해결책은 필터 일 수 있습니다. accessControl()ShiroSecurityFilters.groovy으로 호출하기 전에 현재 URL을 다른 변수에 쓰려고 시도하십시오. 현재 URL은 request.forwardURI을 통해 가져올 수 있습니다. 업데이트

: 그냥 내 마지막 가정을 검증 -이 나에게 깨끗한 솔루션을 보인다 ShiroSecurityFilters.groovy에서

가 액세스 할 수 있습니다

  // Access control by convention. 
      if (!accessControl()) { 
       session.deniedUrl = request.forwardURI 
       return false 
      } 

  // Access control by convention. 
      accessControl() 

교체 귀하의 인증되지 않은 컨트롤러에있는 URL은 session.deniedUrl입니다.

+0

답장을 늦게 드려 죄송합니다. 감사합니다 랄프, 당신의 업데이트 된 솔루션은 깨끗하고 단순한 것 같습니다. 나는 그걸로 갈 것 같아. – David