📄 aclcontrol.java
字号:
package com.exp.fcl.security.aclimp;
import com.exp.fcl.security.UserLogin;
public class ACLControl {
protected UserLogin login;
public ACLControl(UserLogin login) {
this.login = login;
}
/**
* 检查source与target是否有重叠的角色,在target中"*"表示所有角色;所有空字符串角色不作处理
*
* @param source
* @param target
* @return
*/
protected boolean checkOverlap(String userID, String[] source,
String[] target) {
int sLength = source.length;
int tLength = target.length;
for (int j = 0; j < tLength; j++) {
String tTemp = target[j];
tTemp = tTemp.trim();
if ("*".equals(tTemp)) {
return true;
}
if (!"".equals(tTemp)) {
if (tTemp.equalsIgnoreCase("u:" + userID)) {
return true;
}
for (int i = 0; i < sLength; i++) {
String sTemp = source[i];
sTemp = sTemp.trim();
if (!"".equals(sTemp)) {
if (sTemp.equals(tTemp)) {
return true;
}
}
}
}
}
return false;
}
/**
* 检查给定的角色列表是否可以访问定义的可访问角色列表和拒绝访问角色列表的资源
*
* @param roles
* 给定的角色列表
* @param aclRolesString
* 可访问角色列表字符串,角色之间以分号隔开
* @param rclRolesString
* 拒绝访问角色列表字符串,角色之间以分号隔开
* @return true 可以访问;false 拒绝访问
*/
public boolean canAccess(String aclRolesString, String rclRolesString) {
if (this.login == null) {
return false;
}
String userID = this.login.getUserID();
String[] roles = this.login.getRoleList();
String aclRealString = aclRolesString;
if ("".equals(aclRolesString)) {
aclRealString = "*";
}
String[] roleList = aclRealString.split(";");
String[] rclRoleList = rclRolesString.split(";");
if (checkOverlap(userID, roles, rclRoleList)) {
return false;
}
return checkOverlap(userID, roles, roleList);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -