本文假定访问iframe所嵌的web app的 SSO 方式是使用 url 附加认证信息(如用户名和密码)。让内嵌 web app 记住自己的最后一次被访问的 url 是最好的也是最简单的方式,因为如果由主程序记录,牵扯到2个 web app 间的通信,简单点的,如使用 javascript 获取内嵌 web app 的地址,跨域会是个问题。
我们为内嵌 web app 增加一个身份验证的 servlet, 目的是为了恢复上次访问的 url。在每次访问内嵌 web app 时,这个 servlet 首先检查当前请求用户是否是有效用户(即 session 是否存在),如果是,则从这个用户的 session 中取出上次访问的 url,并 dispatcher 到这个页面;否则,验证并登录这个用户,从数据库中取出上次访问的 url,并放到 session 中,dispatcher 到这个 url 页面。
在 session 过期时,使用 session listener,将当前用户最后一次访问的 url (应为存于 session 中)放入数据库中。
但是有一个问题,就是在登陆外围系统的时候,用户希望看到内嵌系统的页面是默认的页面,而不是上次访问的 url。如何解决这个问题呢?因为对于内嵌程序来说,用户是不是首次登录,它自然是无从知晓了,这一点只有外围系统才能获知,所以,解决方法就是动态改变 iframe 的 src url的参数,仅在刚登录时告诉内嵌的 web app,“用户刚登录,这是第一次访问你”。