按钮权限控制

按钮权限控制1

  1. 通过拦截器获取前台传入请求参数:类+方法
HandlerMethod methodObj = (HandlerMethod) handler;
String function = methodObj.getBean().getClass().getName() + ":" + methodObj.getMethod().getName();
 
  1. 编写权限检查工具类,由拦截器调用具类的检查方法传入获取的请求参数(String function)返回是否具有权限的boolean值。
  • 2.1调用PermissionUtils.checkPermission()
boolean flag = PermissionUtils.checkPermission(function);
  • 2.2 checkPermission(String function) 权限检查过程:
    2.2.1 判断是否为超级管理员,从session中获取当前登录用户是用户的Emlpoyee信息,拥有超级管理员权限直接放行,结束checkPermission(),return true。
    2.2.2 检查封装的静态List allPermission集合中是否有内容,如果没有,从数据库中查询所有权限,封装到allPermissions中。
    2.2.3 检查传入参数function是否包含在allPermission集合中:
    如果不在集合中 该请求参数不需要权限控制,直接放行。
    如果在集合中进行下一步判断。
    2.2.4 获取用户自身权限集合List userPermission。
    检查传入参数function是否包含在userPermission中(完全匹配过程):
    如果在集合中该请求拥有对应权限,放行。
    如果不在集合中进行进一步的ALL匹配,匹配成功放行,失败拦截。
public static boolean checkPermission(String function)
	{
		HttpSession session = UserContext.get().getSession();
		Employee currnetUserEmployee = (Employee) session.getAttribute(UserContext.USERINSESSION);
		if (currnetUserEmployee.getAdmin())
		{
			// 超级管理员处理
			return true;
		}
		// 拿到function去所有权限中查询,看该权限是否在集合中
		// 获取所有权限信息
		if (CommonUtils.allPermissions.size() == 0)
		{
			// 从数据库中查询所有权限,封装到allPermissions中
			List<Permission> allPermissions = permissionService.selectAll();
			for (Permission p : allPermissions)
			{
				CommonUtils.allPermissions.add(p.getResource());
			}
		}
		// 判断该表达式是否需要权限控制
		if (CommonUtils.allPermissions.contains(function))
		{
			// 如果有改地址需要进行权限控制
			// 先拿到用户权限集合,从Session中获取所有权限集合
			List<String> userPermission = (List<String>) UserContext.get().getSession().getAttribute(UserContext.PERMISSIONINSESSION);
			// 进行完全匹配
			if (userPermission.contains(function))
			{
				return true;
			} else
			{
				// 进行ALL权限匹配
				String allPermissionString = function.split(":")[0] + ":ALL";
				if (userPermission.contains(allPermissionString))
				{
					return true;
				} else
				{

					return false;
				}
			}

		} else
		{
			// 如果没有,直接放行
			return true;
		}
	}
  1. 拦截器获得返回拦截结果,进行后续处理。
if (flag)
			{
				return true;
			} else
			{
				System.out.println("______被拦截________");
				// 如果是页面
				// 如果是Ajax
				if (methodObj.getMethod().isAnnotationPresent(ResponseBody.class))
				{
					// true代表ajax请求
					response.sendRedirect("nopermission.json");
				} else
				{
					response.sendRedirect("nopermission.jsp");
				}
				return false;
			}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值