📄 permissionpackage.java
字号:
package cn.myapps.core.permission.ejb;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import javax.servlet.http.HttpServletRequest;
import cn.myapps.base.dao.PersistenceUtils;
import cn.myapps.base.dao.ValueObject;
import cn.myapps.core.resource.ejb.ResourceProcess;
import cn.myapps.core.resource.ejb.ResourceType;
import cn.myapps.core.resource.ejb.ResourceVO;
import cn.myapps.core.user.action.WebUser;
import cn.myapps.util.ProcessFactory;
public class PermissionPackage {
private static Map _cache;
private static Set getPermissionSet(Object key) {
if (_cache == null) {
try {
loadCache();
} catch (Exception e) {
e.printStackTrace();
}
}
Set ps = (Set) _cache.get(key);
return ps;
}
public synchronized static boolean checkPermission(HttpServletRequest req,
WebUser user) {
if (user.getLoginno().equalsIgnoreCase("admin")) {
return true;
}
Object key = getPerimissionKeyByUri(req);
Set ps = getPermissionSet(key);
if (ps == null || ps.contains(user.getId())) {
return true;
} else {
if (user.getRoles() != null)
for (Iterator iter = user.getRoles().iterator(); iter.hasNext();) {
ValueObject vo = (ValueObject) iter.next();
if (ps.contains(vo.getId()))
return true;
}
if (user.getDepartments() != null)
for (Iterator iter = user.getDepartments().iterator(); iter
.hasNext();) {
ValueObject vo = (ValueObject) iter.next();
if (ps.contains(vo.getId()))
return true;
}
}
return false;
}
public synchronized static boolean checkPermission(ResourceVO r,
WebUser user) {
if (!r.isIsprotected())
return true;
if (user.getLoginno().equalsIgnoreCase("admin")) {
return true;
}
try {
Object key = getPermissionKey(r);
Set ps = getPermissionSet(key);
if (ps == null || ps.contains(user.getId())) {
return true;
} else {
if (user.getRoles() != null)
for (Iterator iter = user.getRoles().iterator(); iter.hasNext();) {
ValueObject vo = (ValueObject) iter.next();
if (ps.contains(vo.getId()))
return true;
}
if (user.getDepartments() != null)
for (Iterator iter = user.getDepartments().iterator(); iter
.hasNext();) {
ValueObject vo = (ValueObject) iter.next();
if (ps.contains(vo.getId()))
return true;
}
}
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public synchronized static void clearCache() throws Exception {
if (_cache != null) {
_cache.clear();
}
_cache = null;
}
public synchronized static void loadCache() throws Exception {
try {
//PersistenceUtils.getSessionSignal().sessionSignal++;
_cache = new MyLinkedMap();
ResourceProcess rp = (ResourceProcess) ProcessFactory
.createProcess(ResourceProcess.class);
Collection cols = rp.doSimpleQuery(null, null);
// for (Iterator iter = cols.iterator(); iter.hasNext();) {
// ResourceVO element = (ResourceVO) iter.next();
// System.out.println("resourceelement-->>"+element.getDescription());
// }
if (cols != null) {
for (Iterator iter = cols.iterator(); iter.hasNext();) {
ResourceVO r = (ResourceVO) iter.next();
if (r.isIsprotected()) {
Object key = getPermissionKey(r);
Set ps = getPermissionSet(key);
if (ps == null) {
ps = new HashSet();
if (r.getRelatedPermissions() != null)
for (Iterator iterator = r
.getRelatedPermissions().iterator(); iterator
.hasNext();) {
PermissionVO pmvo = (PermissionVO) iterator
.next();
if (pmvo.getUser() != null) {
ps.add(pmvo.getUser().getId());
} else if (pmvo.getDepartment() != null) {
ps.add(pmvo.getDepartment().getId());
} else if (pmvo.getRole() != null) {
ps.add(pmvo.getRole().getId());
}
}
_cache.put(key, ps);
}
}
}
}
/*
* PermissionProcess pp = (PermissionProcess) ProcessFactory
* .createProcess(PermissionProcess.class); Collection pms =
* pp.doSimpleQuery(null); for (Iterator iter2 = pms.iterator();
* iter2.hasNext();) { PermissionVO pm = (PermissionVO)
* iter2.next();
*
* ResourceVO r = pm.getResource(); if (r != null) { Object key =
* getPermissionKey(r); Set ps = getPermissionSet(key);
*
* if (ps != null) { System.out.print("pm->"+pm); if (pm.getRole() !=
* null) { ps.add(pm.getRole().getId()); System.out.print("
* role->"+pm.getRole().getName()); } else if (pm.getDepartment() !=
* null) { ps.add(pm.getDepartment().getId()); System.out.print("
* dept->"+pm.getDepartment().getName()); } else if (pm.getUser() !=
* null) { ps.add(pm.getUser().getId()); System.out.print("
* user->"+pm.getUser().getName()); } else { System.out.print("
* none->null"); } System.out.println(); } } }
*/
System.out.println(_cache);
} catch (Exception e) {
throw e;
} finally {
//PersistenceUtils.getSessionSignal().sessionSignal--;
PersistenceUtils.closeSession();
}
}
private static Object getPermissionKey(ResourceVO r)
throws ClassNotFoundException {
return new PerimissionKey(r);
}
private static Object getPerimissionKeyByUri(HttpServletRequest req) {
String uri = ((HttpServletRequest) req).getRequestURI();
String querystr = ((HttpServletRequest) req).getQueryString();
String application = (String)req.getSession().getAttribute("application");
return getPerimissionKeyByUri(uri, querystr, application);
}
public static Object getPerimissionKeyByUri(String uri, String querystr, String application) {
return new PerimissionKey(uri, querystr, application);
}
}
class PerimissionKey extends Object {
private ArrayList key = new ArrayList();
PerimissionKey(ResourceVO r) {
if (r.getResourceAction() != null) {
if (r.getResourceAction().equals(
ResourceType.ACTION_TYPE_ACTIONCLASS)) {
key.add(r.getActionurl()+"$$"+r.getApplicationid());
} else if (r.getResourceAction().equals(
ResourceType.ACTION_TYPE_VIEW)) {
String viewid = r.getDisplayView();
key.add(viewid+"$$"+r.getApplicationid());
} else if (r.getResourceAction().equals(
ResourceType.ACTION_TYPE_OTHERURL)) {
String url = r.getOtherurl();
if (url != null) {
int p = url.indexOf("?");
if (p > 0) {
String uri = url.substring(0, p);
String querystr = url.substring(p + 1);
setKeyByURI(uri, querystr, r.getApplicationid());
} else {
setKeyByURI(url, "", r.getApplicationid());
}
}
} else {
key.add(r.getId());
}
}
}
private void setKeyByURI(String uri, String querystr, String application) {
if (uri != null) {
if (uri.endsWith("displayView.action")) {
if (querystr != null) {
int p1 = querystr.indexOf("_viewid");
int p2 = querystr.indexOf("=", p1);
int p3 = querystr.indexOf("&", p2);
if (p1 >= 0 && p2 > 0) {
String viewid = p3 > 0 ? querystr.substring(p2 + 1, p3)
: querystr.substring(p2);
key.add(viewid);
}
}
} else if (uri.indexOf(".action") > 0) {
key.add(uri.substring(0, uri.indexOf(".action") + 7));
} else {
// int p = querystr!=null?querystr.length();
// if (p >= 0) {
String major = uri;
major = major.replaceAll("\\\\", "/");
major = major.replaceAll("//", "/");
key.add(major);
if (querystr != null) {
String[] tmp = querystr.split("&");
for (int i = 0; i < tmp.length; i++) {
key.add(tmp[i]);
}
// }
}
// else {
// String major = uri;
// major = major.replaceAll("\\\\", "/");
// major = major.replaceAll("//", "/");
// key.add(major);
// }
}
}
}
PerimissionKey(String uri, String querystr, String application) {
setKeyByURI(uri, querystr, application);
}
public boolean equals(Object obj) {
boolean flag = false;
if (obj instanceof PerimissionKey) {
PerimissionKey pk = (PerimissionKey) obj;
if (pk.key.size() > 0 && this.key.containsAll(pk.key)) {
System.out.println("this->>" + this + " obj->>" + obj);
flag = true;
}
// for (Iterator iter = this.key.iterator(); iter.hasNext();) {
// Object element = (Object) iter.next();
// if (pk.key.contains(element)) {
// System.out.println("this->>" + this + " obj->>" + obj);
// System.out.println("false");
// flag = true;
// }
// }
} else {
flag = false;
}
return flag;
}
public String toString() {
StringBuffer buffer = new StringBuffer();
for (Iterator iter = key.iterator(); iter.hasNext();) {
Object element = iter.next();
buffer.append("{").append(element).append("}");
}
return buffer.toString();
}
}
class MyLinkedMap implements Map {
private ArrayList keys = new ArrayList();
private ArrayList values = new ArrayList();
public int size() {
return keys.size();
}
public boolean isEmpty() {
return keys.isEmpty();
}
public boolean containsKey(Object key) {
return keys.contains(key);
}
public boolean containsValue(Object value) {
return values.contains(value);
}
public Object get(Object key) {
int idx = keys.indexOf(key);
if (idx >= 0) {
return values.get(idx);
}
// TODO Auto-generated method stub
return null;
}
public Object put(Object key, Object value) {
int idx = keys.indexOf(key);
Object rtn = null;
if (idx >= 0) {
rtn = values.set(idx, value);
} else {
keys.add(key);
values.add(value);
}
return rtn;
}
public Object remove(Object key) {
int idx = keys.indexOf(key);
Object rtn = null;
if (idx >= 0) {
keys.remove(idx);
rtn = values.remove(idx);
}
return rtn;
}
public void putAll(Map map) {
if (map != null) {
for (Iterator iter = map.keySet().iterator(); iter.hasNext();) {
Object key = (Object) iter.next();
put(key, map.get(key));
}
}
}
public void clear() {
keys.clear();
values.clear();
}
public Set keySet() {
HashSet keySet = new HashSet();
for (Iterator iter = keys.iterator(); iter.hasNext();) {
Object key = (Object) iter.next();
keySet.add(key);
}
return keySet;
}
public Collection values() {
return values;
}
public Set entrySet() {
class MyEntry implements Map.Entry {
Object key;
Object value;
MyEntry(Object key, Object value) {
this.key = key;
this.value = value;
}
public Object getKey() {
return key;
}
public Object getValue() {
return value;
}
public Object setValue(Object arg0) {
value = arg0;
return value;
}
}
;
HashSet set = new HashSet();
for (Iterator iter = keys.iterator(); iter.hasNext();) {
Object key = (Object) iter.next();
set.add(new MyEntry(key, this.get(key)));
}
return set;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -