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

来源:互联网 发布:jenkins 数据库插件 编辑:程序博客网 时间:2024/05/21 13:58
/**
 * 类名: 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
原创粉丝点击