我有一个网站可以输出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等外部程序出来时总是为空,即使我在点击链接之前登录,但是如果我复制并粘贴的话进入浏览器的链接似乎工作正常。救命啊!
如何以这种方式安全地访问内容?
答案 0 :(得分:2)
Excel是否可能打开与您登录的浏览器不同的浏览器(例如,您使用Firefox登录并在单击Excel中的链接时,默认情况下打开Internet Explorer中的链接)。新浏览器将没有经过身份验证的会话的会话cookie,因此“currentUser”将显示为null。