您当前的位置: 首页 >  安全

水的精神

暂无认证

  • 4浏览

    0关注

    711博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

ERP-项目笔记—Day—14(安全框架Shiro的细颗粒验证)

水的精神 发布时间:2018-12-10 15:19:48 ,浏览量:4

  Shiro细颗粒授权控制

  对url建立的访问限制认为是粗颗粒的控制,并不能完全满足我们控制。

  我们还能使用shiro细颗粒授权控制

  细颗粒授权控制包括:方法级别 和 代码级别

  方法级别的控制:

   就是对某个方法加访问控制,用户必须拥有某个权限,才能访问该方法。

   方法级别控制流程:

    1. 开启注解

 在 web层的  applicationContext_shiro.xml 文件里边的最后加入一下代码

	
	
		
		
		
	
		
	
	
	
	 

   2.然后在biz(业务层)添加方法的注解:@RequiresPermissions("相应的方法权限名称")

/**
	 * 审核
	 * 
	 * @param uuid    订单编号
	 * @param empUuid 审核员
	 */
	@RequiresPermissions("采购订单审核")
	public void doCheck(Long uuid, Long empUuid) {

		// 获取订单,并进入持久化状态
		Orders orders = ordersDao.get(uuid);
		if (!Orders.STATE_CREATE.equals(orders.getState())) {
			throw new ErpException("亲!该订单已经审核过了");
		}
		// 1.修改订单的状态
		orders.setState(Orders.STATE_CHECK);
		// 2.设置审核时间
		orders.setChecktime(new Date());
		// 3.审核人
		orders.setChecker(empUuid);
	}

  3.还可以在action相应的方法里边捕获异常:

/**
	 * 订单审核
	 */
	public  void doCheck() {
		//获取当前登录用户
		Emp loginUser = getLoginUser();
		if(loginUser == null) {
			//如果用户没有登录或者session失效
			write(ajaxReturn(false, "请您登录后再进行操作"));
			return;
		}
		try {
			ordersBiz.doCheck(getId(), loginUser.getUuid());
			write(ajaxReturn(true, "审核成功"));
		}catch(ErpException e) {
			write(ajaxReturn(false, e.getMessage()));
		}
		
		catch (Exception e) {
			write(ajaxReturn(false, "审核失败"));
			e.printStackTrace();
			
		}
		
	}

 最后使用成功,成功被拦截。

代码级别的控制:(代码块细颗粒权限控制)

 我项目里边的关于订单的add()方法用到了代码级别的权限控制

//增加代码级别的权限控制
		Subject subject = SecurityUtils.getSubject();
		//如果是采购订单的申请
		if(Orders.TYPE_IN.equals(orders.getType())) {
			//增加代码级别的权限控制
			//判断当前用户是否有采购订单申请的权限
			if(! subject.isPermitted("我的采购订单")) {
				throw new ErpException("权限不足");
			}
		}else if(Orders.TYPE_OUT.equals(orders.getType())) {
			if(! subject.isPermitted("销售订单录入")) {
				throw new ErpException("权限不足");
			}
		}else {
			throw new ErpException("非法参数");
		}

 

关注
打赏
1664074814
查看更多评论
立即登录/注册

微信扫码登录

0.0407s