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

J2EE 权限问题,高手进来讨论一下:)
我们的项目中jsp页面分成多个模块,每个用户有自己的权限模块树,即A用户有模块1,2,3的权限,B用户有模块2,3,4的权限,要求系统对不同的用户所属的模块进行权限验证,即A用户不能访问模块4页面,同理B用户是不能访问模块1页面

大家知道在Struts中是可以通过直接输入/jsp/xxx.jsp的方式绕过Action的权限控制直接访问页面的,我们现在的解决方式是每个模块页面有一个共用的javaBean,该bean实现从session中取出登录用户,判断该用户权限树中是否有该模块页面的权限,如果没有则跳转到登录页面要求以另一用户登录

但是这种解决方式很死,需要为每个页面定义一个ID,在每次初始化时将登录用户所属的模块页面ID都存在session中,虽然可配置在数据库中,但是代码维护性还是较差

各位高人有没有什么更好的解决办法,比如URL重写之类的,可以根据URL来进行权限控制的方法~~

------解决方案--------------------
不知搂主是否使用过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 "),否则就死循环了。