SSH实现一个简单的权限控制实例(三)
2016-08-14 13:24
417 查看
最简单的权限验证方式代码:
上文已经有了struts的自定义拦截器,用来拦截未登录的用户,拦截的方法是auth,编写auth用来处理用户的菜单权限:
这样,就会根据用户所属角色和自身拥有的权限来展示给不同用户不同的界面可操作信息.
在菜单表中插入一些数据:
![](http://static.oschina.net/uploads/space/2016/0814/132038_FMFA_2861620.png)
在角色表中插入几条测试数据:
![](http://static.oschina.net/uploads/space/2016/0814/131840_OfD2_2861620.png)
用户表中也插入几条测试数据分别属于三种角色中的一种:
![](http://static.oschina.net/uploads/space/2016/0814/131912_l1wC_2861620.png)
然后登录不同的用户:
管理员:
![](http://static.oschina.net/uploads/space/2016/0814/132012_qgne_2861620.png)
user1:
![](http://static.oschina.net/uploads/space/2016/0814/132138_YilX_2861620.png)
可以看到已经能够正确的过滤掉一些菜单.
当然这个方法是很不好的,还有一种验证菜单权限的方法:
用菜单的Id进行2的权和来实现.
这样,基本就能实现一个最基本的权限控制.
public class RightsUtils { public static boolean testRight(String menuId, String[] rights) { for(String right : rights) { if(menuId.equals(right)) { return true; } } return false; } } 通过判断数据库中的权限是否包含了给定的url,也就是菜单的ID.
上文已经有了struts的自定义拦截器,用来拦截未登录的用户,拦截的方法是auth,编写auth用来处理用户的菜单权限:
@Component @Scope("prototype") public class AuthAction extends ActionSupport { @Resource private RoleService roleService; @SuppressWarnings("unchecked") public String authCheck() { User user = (User) ServletActionContext.getRequest().getSession().getAttribute("user"); String rights = user.getRights(); Integer roleId = user.getRoleId(); Role role = roleService.findById(roleId); rights += "," + role.getRights(); if(rights != null) { String[] rightsArray = rights.split(","); List<String> list = new ArrayList<String>(); for (int i=0; i<rightsArray.length; i++) { if(!list.contains(rightsArray[i])) { list.add(rightsArray[i]); } } rightsArray = list.toArray(new String[list.size()]); List<Menu> menuList = (List<Menu>) ServletActionContext.getRequest().getSession().getAttribute("menuList"); for(Menu menu : menuList) { menu.setHasMenu(RightsUtils.testRight(menu.getMenuId().toString(), rightsArray)); for(Menu submenu : menu.getSubMenu()) { submenu.setHasMenu(RightsUtils.testRight(submenu.getMenuId().toString(), rightsArray)); } } } return SUCCESS; } }
这样,就会根据用户所属角色和自身拥有的权限来展示给不同用户不同的界面可操作信息.
在菜单表中插入一些数据:
![](http://static.oschina.net/uploads/space/2016/0814/132038_FMFA_2861620.png)
在角色表中插入几条测试数据:
![](http://static.oschina.net/uploads/space/2016/0814/131840_OfD2_2861620.png)
用户表中也插入几条测试数据分别属于三种角色中的一种:
![](http://static.oschina.net/uploads/space/2016/0814/131912_l1wC_2861620.png)
然后登录不同的用户:
管理员:
![](http://static.oschina.net/uploads/space/2016/0814/132012_qgne_2861620.png)
user1:
![](http://static.oschina.net/uploads/space/2016/0814/132138_YilX_2861620.png)
可以看到已经能够正确的过滤掉一些菜单.
当然这个方法是很不好的,还有一种验证菜单权限的方法:
public class RightsHelper { /** * 利用BigInteger对权限进行2的权的和计算 * @param rights int型权限编码数组 * @return 2的权的和 */ public static BigInteger sumRights(int[] rights){ BigInteger num = new BigInteger("0"); for(int i=0; i<rights.length; i++){ num = num.setBit(rights[i]); } return num; } /** * 利用BigInteger对权限进行2的权的和计算 * @param rights String型权限编码数组 * @return 2的权的和 */ public static BigInteger sumRights(String[] rights){ BigInteger num = new BigInteger("0"); for(int i=0; i<rights.length; i++){ num = num.setBit(Integer.parseInt(rights[i])); } return num; } /** * 测试是否具有指定编码的权限 * @param sum * @param targetRights * @return */ public static boolean testRights(BigInteger sum,int targetRights){ return sum.testBit(targetRights); } /** * 测试是否具有指定编码的权限 * @param sum * @param targetRights * @return */ public static boolean testRights(String sum,int targetRights){ if(Tools.isEmpty(sum)) return false; return testRights(new BigInteger(sum),targetRights); } /** * 测试是否具有指定编码的权限 * @param sum * @param targetRights * @return */ public static boolean testRights(String sum,String targetRights){ if(Tools.isEmpty(sum)) return false; return testRights(new BigInteger(sum),targetRights); } /** * 测试是否具有指定编码的权限 * @param sum * @param targetRights * @return */ public static boolean testRights(BigInteger sum,String targetRights){ return testRights(sum,Integer.parseInt(targetRights)); } public static void main(String[] args) { BigInteger i = new BigInteger("35822"); boolean a = testRights(i, 12); System.out.println(a); //int[] rights = {2,9,8,15,3,10,11,12,16,17,18,20}; int[] rights = {2,3,5,6,7,8,11,15,9}; System.out.println(sumRights(rights)); } }
用菜单的Id进行2的权和来实现.
这样,基本就能实现一个最基本的权限控制.
相关文章推荐
- SSH实现一个简单的权限控制实例(一)
- SSH实现一个简单的权限控制实例(二)
- Spring MVC代码实例系列-11:Spring MVC实现简单的权限控制拦截器和请求信息统计拦截器
- 简单客户系统的权限控制实现
- 实现委托的一个简单实例(附多点委托)
- 在家看孩子,10分钟生成一个业务管理系统【能支持多数据库,大数据,流程审批,权限控制,即时提醒】,视频讲解详细实现步骤
- 一个简单实现登陆控制的struts2框架
- 【分享】分享一个基于SSH实现的简单学生选课系统(附源码)
- [WMI实例]实现文件系统管理功能封装。提供共享文件和文件系统访问权限控制能力
- J2ME应用实例——一个简单的计算器实现(附源代码)
- 【分享】分享一个基于SSH实现的简单学生选课系统(附源码)
- CodeIgniter通过hook的方式实现简单的权限控制
- 在VC++实现控制程序只运行唯一一个实例
- ASP.NET 实现简单的权限控制
- 实例说明asp.net中的简单角色权限控制
- ADA程序实例(一个简单的智能指针实现)
- 一个简单的实现不同权限的用户登录后看到不同的菜单设计的数据库表清单
- 远程控制的简单实现之SSH
- redhat6.2通过allow deny实现ssh访问权限控制
- 一个简单的ssh+extjs实例