这里我介绍一种很常用,也比较Professor的权限控制思路。
把具体的权限设置为一个正整数值,如果一个用户有多个权限的话,比如1,2权限,那么我们设置值的时候就是 num.setBit(1),num.setBit(2),然后把返回的num值保存在session中,要验证是否有权限的话,只要从session中 取得保存的num,然后执行下num.test(权限值),如果返回true就是有权限的,否则无权限。下面例子:
package com.hundsun.network.post.settle.job; import java.math.BigInteger; public class TestBigInteger { public static void main(String[] args) { //初始 BigInteger num = new BigInteger("0"); num = num.setBit(2); num = num.setBit(1); System.out.println(num); System.out.println(num.testBit(2)); System.out.println(num.testBit(1)); System.out.println(num.testBit(3)); } }
返回的结果是:
6
true
true
false
为什么是6呢? 6= 2^2 + 2^1 其实计算的值是2的权的和
好处是,session中存储权限的空间很小,一个整数就代表了所有的权限,验证的时候计算速度也很快。
相关推荐
如果源文件中除了公共类之外还包含了其他非公共类(如私有类或默认访问权限的类),这些非公共类可以与公共类放在同一个源文件中,但源文件的名字仍然需要与公共类的名字保持一致。 **示例代码解释:** ```java //...
这种异常通常是因为数组索引计算错误或边界条件判断不当导致的。 **示例代码:** ```java int[] arr = new int[3]; System.out.println(arr[3]); ``` 在这个例子中,尝试访问数组`arr`的第四个元素会导致`...
这可能导致意料之外的行为,如循环计数错误或者安全关键的条件判断失误。在Java中,可以使用BigInteger或BigDecimal类来处理大整数,以防止溢出。同时,对整数操作进行边界检查也是必要的。 路径保护则是另一个重要...
在上述提供的代码片段中,我们看到一个条件判断,如果当前登录的用户不是查看用户本人,就会显示关注或取消关注的表单。`isFollowing()`方法是假设在`User`模型中定义的,用来检查用户是否关注了指定的用户: ```...
- 使用更安全的算术操作替代,如BigInteger和BigDecimal类。 #### 4. `java.lang.ArrayIndexOutOfBoundsException` **描述**:当数组索引超出数组范围时抛出此异常。 **示例**:尝试访问一个不存在的数组元素: `...
需要具体代码示例才能判断。 **1.50 多线程有几种实现方法?同步有几种实现方法?** - 实现多线程的方法有两种:继承`Thread`类或实现`Runnable`接口。 - 同步可以通过`synchronized`关键字或`ReentrantLock`等显式...
其他类必须声明为非公共的(如默认权限,即没有任何访问修饰符)。例如,在`Main.java`文件中,你可以定义一个名为`Main`的公共类和其他非公共类。 #### 2. Java有没有goto? - **答案解析**:Java语言本身并不支持...
- 其他非公共类(默认访问权限的类或内部类)可以在同一个文件中定义。 2. **Java中的`goto`关键字** - Java中没有传统意义上的`goto`关键字。 - 但在Java中可以通过标签化的`break`和`continue`来模拟`goto`的...
由于给出的 "部分内容" 中没有具体代码示例,因此无法判断代码的不妥之处。 #### 17. 作用域关键字 public、private、protected 和默认(无)的区别 - public:类、方法、变量可被任何其他对象访问。 - private:...
- **知识点**: `public`表示公有,`private`表示私有,`protected`表示受保护,不写默认为包私有或默认访问权限。 - **注意事项**: 不同的访问修饰符决定了成员的可见性范围。 **18. Overload和Override的区别。...
设计一个能够处理百亿级别的计算器涉及到大数运算,可以使用`BigInteger`类来进行操作。 #### 10. 使用final关键字修饰一个变量时,是引用不能变,还是引用的对象不能变? `final`修饰符用于声明不可变对象。如果...
方法同步需要具体代码示例才能判断,但通常使用`synchronized`关键字修饰方法或代码块。 #### 50. 多线程实现和同步方法 多线程可以通过继承`Thread`类、实现`Runnable`接口或使用`Callable`接口和`Future`任务来...
- BigInteger类的特点:处理任意精度的整数。 - BigDecimal类的作用:处理任意精度的小数。 - **对象克隆技术** - 克隆技术的意义:复制对象。 - 实现克隆的方式:实现Cloneable接口并重写clone()方法。 - **...
如果第一个条件为假,则不会执行第二个条件的判断。 ##### 4、在JAVA中如何跳出当前的多重嵌套循环? - **答案**:可以使用`break`语句来跳出当前的循环。如果需要跳出外层循环,可以使用标记来实现。例如: ```...
未提供具体的代码示例,无法判断其中的问题所在。 #### 17. 访问控制符的作用域 - `public`: 对任何类可见。 - `private`: 只对当前类可见。 - `protected`: 对同一包内的类和子类可见。 - 不写访问控制符: 默认为`...
- **非公共类**:可以在同一个文件中定义多个非公共类(即默认访问权限的类)。 #### 2. Java有没有goto? Java语言中**没有**`goto`关键字。`goto`在C和C++中作为控制流关键字使用,但在Java中被保留但未启用。...
- 其他非公共类(即默认访问权限的类)数量不限。 #### 2. Java中的`goto` - Java语言中没有传统意义上的`goto`语句。`goto`在Java中是一个保留关键字,但在实际编程中并不使用。 - Java通过其他结构(如循环控制...
设计大数计算器需要考虑数据溢出问题,使用`BigInteger`类可以处理任意大的整数。 ### 10. `final`关键字 使用`final`关键字修饰变量时,主要是引用不能变。如果是基本类型,则值不能变;如果是对象类型,引用指向...