- 1、本文档共41页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
I在项目中集成shiro权限框架
在项目中集成shiro权限框架(1)?Shiro是一个功能强大的轻量级权限框架,相对其它权限框架(比如spring?security)来说,要易用得很,下面,我给大家讲讲如何在一个项目中简单整合shiro。我们通常所说的权限,就是要判断某个操作者是否有操作某个资源的权限,而资源,可以是菜单、链接、功能按钮、业务方法、某类型的数据等等,根据需求,每个项目的权限可能都有所不同,通用万能权限系统是不存在的。?Shrio的权限包括认证、授权、密码管理、会话管理等四个部分,每一个部分,shrio都进行了抽象,以做到和具体应用平台、环境的无关。关于shiro的基础了解,大家可到这里去看看:/cn/articles/apache-shiro权限系统的设计,根据不同的权限粒度,会用所不同,比如:有的系统到菜单级,而有的到每一个功能按钮级,有的到方法级,有的到业务数据级,我在这仅仅讨论前两类。?上面是一个对象关系图,模块在此处仅仅为菜单进行逻辑归类,当然,也可以建立菜单和功能的一对多关系,为功能进行逻辑归类。当然,菜单也可以建成关联的树状结构,以更好扩展。?根据对象关系,可以设计出表结构,我直接贴出数据截图:模块表:菜单表:?操作表,一般对应页面中的按钮,其中f_action_flag对应于restful中的增、删、查、改:?角色表:?角色-菜单关系表:?角色-功能表:?用户表:?用户-角色关系表:?上面截图中,真正有效的表7张,权限控制到页面及功能上。下篇,贴出上面的类代码及class映射文件。在项目中集成shiro权限框架(2)基础代码贴上:对象如下:/**?*?用户对象?*??*?@authorLjh?*??*/public?classUser?implementsSerializable?{?????//?学生编码(由系统自动生成)????privateLong?id;?????//?姓名????@NotEmpty(message?=?姓名不可以为空!)????@Length(min?=?2,?max?=?5)????privateString?name;?????//?出生日期????@NotNull(message?=?生日不能为空)????@Past(message?=?生日输入不正确,请核对!)????privateDate?birthday;?????//?登录密码????privateString?password=?111;?????//?用户角色集合字符????privateSetRole?roles=?newHashSetRole();????????/**?????*?得到该用户可访问的模块,模块中的菜单将实例化?????*?@return?????*/????publicListModel?getModels()?{???????ListModel?models?=?newArrayListModel();???????for(IteratorMenu?its?=?this.getMenus().iterator();?its.hasNext();){???????????Menu?m?=?its.next();????????????if(!models.contains(m.getModel()))?{??????????????Model?model?=?newModel();??????????????model.setId(m.getModel().getId());??????????????model.setDisplayOrder(m.getDisplayOrder());??????????????model.setModelName(m.getModel().getModelName());??????????????model.getMenus().add(m);??????????????models.add(model);???????????}?else{??????????????for(Model?model?:?models)?{??????????????????if(model.getId()?==?m.getModel().getId())?{?????????????????????model.getMenus().add(m);?????????????????????break;??????????????????}??????????????}???????????}???????}???????Collections.sort(models);???????returnmodels;????}????????/**?????*?得到用户可访问的菜单资源?????*?
文档评论(0)