我们的项目中jsp页面分成多个模块,每个用户有自己的权限模块树,即A用户有模块1,2,3的权限,B用户有模块2,3,4的权限,要求系统对不同的用户所属的模块进行权限验证,即A用户不能访问模块4页面,同理B用户是不能访问模块1页面
大家知道在Struts中是可以通过直接输入/jsp/xxx.jsp的方式绕过Action的权限控制直接访问页面的,我们现在的解决方式是每个模块页面有一个共用的javaBean,该bean实现从session中取出登录用户,判断该用户权限树中是否有该模块页面的权限,如果没有则跳转到登录页面要求以另一用户登录
但是这种解决方式很死,需要为每个页面定义一个ID,在每次初始化时将登录用户所属的模块页面ID都存在session中,虽然可配置在数据库中,但是代码维护性还是较差
解决:
不知搂主是否使用过j2ee的web.xml的<security-constraint>用法,这个完全解决问题。
如果不用以上方法,则可以:
1、把jsp的所在的文件夹或文件本身的名字设计得有规律性;
2、把用户放到用户组中去,用户组与资源相关联;
3、创建一个web filter进行处理本web模块所有的请求,也就是<url-pattern>*</url-pattern>;
4、在filter中,截取请求url的文件夹部分及文件名等,做逻辑处理构造或获取资源ID,再根据资源ID和登陆用户的用户组ID访问“用户组资源表”进行验证,如验证成功,则filterChain.doFilter(),否则,则response.redirect("没有权限.jsp");
注意:逻辑处理时要考虑到哪些是受限资源,哪些不是,
如访问的是 "没有权限.jsp" 则要filterChain.doFilter();
而不是response.redirect("没有权限.jsp"),否则就死循环了。
posted on 2007-07-21 01:26
当里个当 阅读(156)
评论(0) 编辑 收藏 所属分类:
JAVAWEB