小弟从事java开发2年多,一直有个安全限制的疑问,直接上描述(环境为:SSH,不过觉得这个不是重要的)
举例:
在项目中会配有不同的角色,每个角色会动态配有不同的模块(功能),这样可以实现不同身份的人登陆系统(或网站)时,看到的模块不一样,如,当超级管理员的角色登陆系统时,看到的功能有:1,2,3,4,5号模块,而当普通用户登陆系统时,可能看到的只有1,2,3号模块,这毫无疑问是完全可以做到的,而且,当你没有用户名and密码时,是不能登陆系统的,解决方案,只要随便一个过滤器就可以搞定,但是呢,问题的关键来了,假如某用户以一个普通身份的角色登陆,当看到1,2,3号模块后,无意间猜到了属于超级管理员的4号模块URL,于是乎,直接在IE中输入一回车,想必想象就不用我多说了,这个问题呢,自己的开发经验或解决方案有2个:
1〉在每个Action中分别调用封装好的,身份验证,如,判断是否已经有该用户Session,并且根据Session的身份信息,查数据库,是否匹配将要显示的界面或是否给予逻辑处理的功能。
注:对于方案1,自我感觉,每个Action中写的话,有点累,而且开发的时候每个Action都写,怎么感觉都不是高水平代码
2〉当然是写过滤器了或拦截器,如Session拦截器,将其拦截到的Session信息,与实现配置好的XML中所述角色URL匹配,如果能匹配,ok,可以继续,否则,返回。
注:对于方案2,维护起来又是个很麻烦的事情,如:假如存在20个角色,每个角色又不同的模块展示,加上那些普通的Jsp_Url,配置起来也不是一个简单的事情
有朋友拍砖说,学习一下Spring的安全框架,但我和同事搞了一段时间(我并没有坚持到最后),听他说,那个根本不是解决这个问题的。
希望各位IT朋友交流一下,提一下各自在项目当中的解决方案。
举例:
在项目中会配有不同的角色,每个角色会动态配有不同的模块(功能),这样可以实现不同身份的人登陆系统(或网站)时,看到的模块不一样,如,当超级管理员的角色登陆系统时,看到的功能有:1,2,3,4,5号模块,而当普通用户登陆系统时,可能看到的只有1,2,3号模块,这毫无疑问是完全可以做到的,而且,当你没有用户名and密码时,是不能登陆系统的,解决方案,只要随便一个过滤器就可以搞定,但是呢,问题的关键来了,假如某用户以一个普通身份的角色登陆,当看到1,2,3号模块后,无意间猜到了属于超级管理员的4号模块URL,于是乎,直接在IE中输入一回车,想必想象就不用我多说了,这个问题呢,自己的开发经验或解决方案有2个:
1〉在每个Action中分别调用封装好的,身份验证,如,判断是否已经有该用户Session,并且根据Session的身份信息,查数据库,是否匹配将要显示的界面或是否给予逻辑处理的功能。
注:对于方案1,自我感觉,每个Action中写的话,有点累,而且开发的时候每个Action都写,怎么感觉都不是高水平代码
2〉当然是写过滤器了或拦截器,如Session拦截器,将其拦截到的Session信息,与实现配置好的XML中所述角色URL匹配,如果能匹配,ok,可以继续,否则,返回。
注:对于方案2,维护起来又是个很麻烦的事情,如:假如存在20个角色,每个角色又不同的模块展示,加上那些普通的Jsp_Url,配置起来也不是一个简单的事情
有朋友拍砖说,学习一下Spring的安全框架,但我和同事搞了一段时间(我并没有坚持到最后),听他说,那个根本不是解决这个问题的。
希望各位IT朋友交流一下,提一下各自在项目当中的解决方案。
解决方案 »
- struts2 中Action 怎么安条件查询怎么安条件查询
- Flex与JAVA通信
- 关于jsp数据提交给本页问题
- 判斷excel中某列是否有重復的值最有效率的辦法???
- jndi问题
- hibernate查询问题
- 为什么?oracle与汉字。
- 要怎样才可以在weblogic7启动时把sqlserver的JDBC驱动加载进去呢?谢了先!!!
- 关于JBuinld7.0、WebLogic7.0很简单的问题,急急!!!在先等候。
- 有什么办法能够对json格式的 POST请求中的参数进行修改?
- 求解“could not read column value from result set: name18_6_;异常”
- jsp如何存日期到mysql啊?
最少要在必要的方法上进行拦截判断,判断用户是否有这样的权限
最基本的就是判断你的session中所带的标志是否是admin或者之类的听说有个东西叫ACEGI
以上方面解决的都是功能权限(包括模块、菜单、功能按钮这些),
至于具体的数据权限,你也要进行二次权限的判断。那就跟业务逻辑有关系了。
感谢kaynezhang的回答,记得以前做Asp.Net的时候也是按文件夹控制的,但是,这不仅让我想起一个问题,假如说一个页面中有增删改查,四个按钮的话,又该怎样控制呢?角色1为普通用户,只有查看的权限,而角色2位高级权限,可以定位到增删改查。这是否又增加了难度呢?希望kaynezhang,或其他IT朋友给出交流意见!
你提到的方案的原理,和把URl写道XML当中是一样的,只不过换了个存储方式,呵呵,希望大牛们能高抬贵手,指点一番。
WWW-Authenticate有听说过,不过大多数朋友都觉得它不安全,必须采用https的方法屏蔽,所以,就本话题而言,个人觉得不是最佳解决方案。
shine333回答的有点简单,或许对于一个不懂WWW-Authenticate得程序员来说,有点过于迷茫,还往shine333提出宝贵的尽量详细的意见,供大家参考,谢谢!
或许是因为发表的人过于少吧,目前,除了shine333的回答,我不能真实理解外,kaynezhang得方案虽然有点复杂,但原理还是很简单的。继续期待各位牛人的发言,交流时最大的进步。
1、对于action:通过拦截器,在拦截器里获取action的名字,然后都数据库里验证用户是否有权限。2、对于.jsp资源:只有用户有权限时才显示出链接
如:
if(auth.check(user, "xxx.jsp")){
<a herf="xxx.jsp"><a/>
}这样做虽然做到了权限的控制。但把所有的action名字和jsp文件的名字维护到数据库中,也是一个比较麻烦的工作。特别是action和jsp文件比较多的时候。还有这种方式在权限分配的时候也是比较麻烦的。还有因为导航区的那个页面,有很多的jsp文件链接。所有这个页面的生产要进行很多次的数据库访问,明显感觉很慢。
和LZ一样很期望大牛们,说说其他的更方便的解决方案
等高人