filter真的能解决验证问题么?大家来看看这种情况

samplerain 2005-08-19 02:42:24
我写了一个filter,用来校验用户登录。基本功能已经实现了:用户没登录并且请求了非法url(非login),转到登陆;session过期以后,自动转到登录页面。

到了这,问题来了:

如果我当前页面是由两个frame组成,那么当session过期以后,这两个页面会同时刷成了login!这个问题如果单为了解决而解决不是没有办法。一些页面flag加上js完全可以搞定。但是我想,有没有很优雅的解决方法呢?看来filter在这种问题上还是有局限性的。

标题有点哗众取宠,希望大家不要见怪,更希望大家能一起讨论或是给出一个“上策”来解决这个问题~
...全文
206 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
samplerain 2005-08-19
  • 打赏
  • 举报
回复
解决问题了!

原来自己一直没想通这个关键:去判断自身是否是frame!而是一味的从filter的url想办法,汗~

多谢两位的帮忙了

zcjl 2005-08-19
  • 打赏
  • 举报
回复
在登录页面动手脚,判断自己是在一个frame里面,就自动把顶层窗口的url改写为登录页面,用js来实现,类似下面的两行代码:
if(self.location.href!=top.location.href)
top.location.href=self.location.href;
samplerain 2005-08-19
  • 打赏
  • 举报
回复
真的没有更好的方法了么?难道大家都不用过filter做登录校验和session检查?
samplerain 2005-08-19
  • 打赏
  • 举报
回复
to: iiilin(iiilin)
我暂时也在用这样的方法,不过我做了一个check jsp,然后各个页面include一下

<%@ include file="redirect(needReLogin).jsp" %>


redirect(needReLogin).jsp:
<%
Object checkedForm = request.getSession().getAttribute("checkedForm");
if(checkedForm == null)
{
RequestDispatcher rd = request.getRequestDispatcher("error(needReLogin).jsp");
rd.forward(request,response);
}
%>
这和你给出的使用struts的logic的思路差不多

但是并不能根本解决问题,比如当session过期的时候,我在下面的frame(不妨假设只有header和body两个frame)发出了一个跳转的req,这时候由于session过期,filter就会把下面的frame redirect 到login,而此时header仍然存在着...

我一直在想,能不能在filter类中做些手脚,比如判断request来至于sub frame,然后redirect parent?

呵呵,想不通,就上来找大家讨论一下,希望各位继续帮忙~

iiilin 2005-08-19
  • 打赏
  • 举报
回复
在main.jsp头部包含
<logic:notPresent name="<%=com.astro.util.AppConstants.ADMIN%>" scope="session">
<logic:forward name="failure"/>
</logic:notPresent>

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧