日期:2014-05-18  浏览次数:20643 次

Spring+Struts+Hibernate开发,如何防止用户绕开登陆直接访问JSP网页
按照流程,用户应当登陆后才能访问后面操作的页面,比如http://xxx.xxx.com/login.jsp,登陆成功后被struts导向到一个新的info.jsp,如果用户不访问login.jsp直接打开Browser访问http://xxx.xxx.com/info.jsp,请问大家比较好的符合SSH编程的框架的方法

通常的方法包括:
1.JSP页面代码方法,在后续jsp文件中用EL/JTSL写一些代码判断session中某个状态是否被设置来判断用户是否登陆.但是这样感觉逻辑和表现层没有分开,不符合MVC的框架
2.所有后续的连接,通过Struts   ActionForward的方法不直接导向具体JSP页面,而是产生一个新的action,经过action类判断一下再导向具体页面,如所有link用struts   EL写成: <html:link   action= "/abc.do "...> .   这样是符合MVC的框架可是这样一来是否写的Action类又太多了,每个连接都写一个,非常麻烦.

请问高手达人,有无更简洁高效的方法进行实现?

------解决方案--------------------
我是做了一个过滤器

数据库中记录不同身份的人的所有操作,每当用户发出一个请求,就在过滤器中查询数据库,看看用户有没有被授权通过请求,如果合法,则执行,如果不合法就不执行,提醒用户。

不知道别人是怎么做的
------解决方案--------------------
jsp文件放在WEB-INF下,所有的链接都是Action,然后forward到jsp上。
------解决方案--------------------
过滤器..
------解决方案--------------------
这个不知道符不符合你的要求

<logic:notPresent name= "userContext ">
<jsp:forward page= "error.jsp "> </jsp:forward>
</logic:notPresent>

每个用户登陆后都会创建一个用户上下文, 用来存放或缓冲用户数据, 以此Bean来判断是否登陆

可以将此代码内嵌在每一个需要验证的Jsp里面.
或者将此代码写成一个单独的Jsp, 再包含在每个需验证页面, 方便修改验证逻辑.

如果不知道哪些页面需要验证, 哪些不需要验证, 随意性比较大的话, 建议采用内嵌.
如果有规律可循的话, 个人感觉还是采用过滤器方便. 获得请求参数, 根据Url-Pattern采用不同的策略进行验证.

个人意见, 仅供参考!