2012-06-11 6 views
0

보안 콘텐츠로 하이퍼 링크가있는 Excel 보고서를 출력하는 웹 사이트가 있습니다. 같을 것이다 링크 중 하나 ...외부 링크에서 사용자가 유효하지 않습니다.

http://www.[site].com/externalLinkDigester?externalSession=[SHA Encrypted Text] 

쿼리 문자열 인수 (externalSession)는 24 시간 동안 만 유효하며에만 보고서를 작성한 사용자가 액세스 할 수있는 고유 한 영숫자 문자열입니다. 내 컨트롤러는 문제는

class ExternalLinkDigester{ 

    def springSecurityService; 

    def index = { 
     def currentUser = springSecurityService?.currentUser 

     if (!currentUser){ 
      redirect(controller:'login') 
     } 

     def request = ExternalSession.findByName(params.externalSession); 

     if (request.isExpired(){ 
      //show expired content page 
     } 


     if (sameUser(currentUser, request.user){ 
      //show content 
     }else{ 
      redirect(controller:'login') 
     } 



    } 
} 

... 이런 식으로 뭔가를 보이는 형태에게 내가 그러나 링크를 클릭하기 전에 로그인 한 경우에도 Excel과 같은 외부 프로그램을 오는 때 springSecurityService.currentUser이 경우, 항상 null이 무엇인지에 상관없이 링크를 복사하여 브라우저에 붙여 넣으면 제대로 작동하는 것 같습니다. 도움!

어떻게 이런 방식으로 안전하게 콘텐츠에 액세스 할 수 있습니까?

+0

MS Word 나 Outlook과 같은 다른 앱에 링크가 있다면 제대로 작동합니까? – Ritesh

답변

2

Excel에서 로그인 한 브라우저와 다른 브라우저를 열 수 있습니까 (예 : Firefox에 로그인 한 상태에서 엑셀에서 링크를 클릭하면 Internet Explorer에서 링크가 열림). 새 브라우저에는 인증 된 세션에 대한 세션 쿠키가 없으므로 "currentUser"가 null로 표시됩니다.

+0

새 탭과 동일한 브라우저입니다. –

+0

브라우저와 버전은 무엇입니까? 내가 아는 한 정상적인 동작은 모든 탭이 쿠키 인 경우 동일한 세션을 재사용 할 수 있다는 것입니다. 귀하의 웹 사이트가 쿠키리스 세션 메커니즘을 사용하지 않는 한 특별 식별자 문자열이 매개 변수로 URL에서 전달됩니다. 그러나 다른 매개 변수를 보지 못했기 때문에 귀하의 예를 기반으로 한 사례는 아닙니다. – Tri

관련 문제