采用long型数据的每一个二进制位代表一种权限,进行票据权限保存、取消、认证

/**
 * 类名: TicketHelper <br/> 
 * 功能: TODO 凭证认证辅助类
 * 使用long 数据类型的1-63位二进制位来表示63项权限 ,
 * 1.表示有该项权限,0表示没有该项权限
 * 例如,ticket:1010 对应的十进制数为10,表示有第二和第四项权限

 * ticket:111 对应的十进制数为7,表示有第一、二、三项权限


public class TicketHelper {
	
	/** 
	 * initTicket:获取最初凭证 <br/>
	 * @author jiangy 
	 * @return 
	 */  
	public static Long initTicket(){
		return 0L;
	}
	
	/** 
	 * saveTicket:保存凭证,多次保存不会对最后凭证造成影响,每次的保存结果只改变postion位置的二进制位为1<br/>
	 * @author jiangy 
	 * @param ticket 原始凭证
	 * @param position 保存位置
	 * @return 最新凭证
	 * @throws Exception 
	 */  
	public static Long saveTicket(Long ticket ,long position) throws Exception{
		ticket = check(ticket,position);
		return ticket|(1<<(position-1));
	}
	/** 
	 * cancelTicket:(取消凭证).多次取消不会对最后凭证造成影响,每次的保存结果只改变postion位置的二进制位为0 <br/>
	 * @author jiangy 
	 * @param ticket 原始凭证
	 * @param position 取消位置
	 * @return 最新凭证
	 * @throws Exception 
	 */  
	public static Long cancelTicket(Long ticket ,long position)throws Exception{
		ticket = check(ticket,position);
		return ticket&(~(1<<(position-1)));
	}
	/** 
	 * checkTicket:(凭证认证,返回true,表示有该项权限,false,表示没有该项权限). <br/>
	 * @author jiangy 
	 * @param ticket 凭证
	 * @param position 位置
	 * @return
	 * @throws Exception 可能超出最大位置63位
	 */  
	public static boolean checkTicket(Long ticket ,long position)throws Exception{
		ticket = check(ticket,position);
		return (ticket&(1<<(position-1))) >0 ;
	}
	
	/** 
	 * check:凭证和权限位置长度检查. <br/>
	 * @author jiangy 
	 * @param ticket
	 * @param position
	 * @throws Exception 
	 */  
	private static Long check(Long ticket ,long position) throws Exception{
		if(ticket == null){
			ticket = 0L;
		}
		if(position > 63){
			throw new Exception("位置超出最大值63");
		}
		return ticket;
	}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值