用户无法从外部链接有效

时间:2012-06-11 18:14:57

标签: grails spring-security

我有一个网站可以输出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')
        }



    }
}

问题是,无论springSecurityService.currentUser在从Excel等外部程序出来时总是为空,即使我在点击链接之前登录,但是如果我复制并粘贴的话进入浏览器的链接似乎工作正常。救命啊!

如何以这种方式安全地访问内容?

1 个答案:

答案 0 :(得分:2)

Excel是否可能打开与您登录的浏览器不同的浏览器(例如,您使用Firefox登录并在单击Excel中的链接时,默认情况下打开Internet Explorer中的链接)。新浏览器将没有经过身份验证的会话的会话cookie,因此“currentUser”将显示为null。