📄 auth.java
字号:
/* * 作者: 胡李青 * qq: 31703299 * Copyright (c) 2007 huliqing * 主页 http://www.tbuy.biz/ * 你可以免费使用该软件,未经许可请勿作用于任何商业目的,如有技术问题请与本人联系! * */package biz.tbuy.common;import biz.tbuy.common.bean.BaseBean;import biz.tbuy.common.logs.Elog;import biz.tbuy.share.XmlOper;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import java.util.Set;import org.w3c.dom.Document;import org.w3c.dom.Element; import org.w3c.dom.NodeList;/** * @author huliqing * <p><b>qq:</b>31703299 * <p><b>E-mail:</b><a href="mailto:huliqing.cn@gmail.com">huliqing.cn@gmail.com</a> * <p><b>Homepage:</b><a href="http://www.tbuy.biz/">http://www.tbuy.biz/</a> * * 载入网站的页面授权配置信息于applicationScope中 * 查看:ContextListener.java */public class Auth extends BaseBean{ private Map<String, List<String>> _auths; public Auth(String authsPath) { init(authsPath); } @Override public String toString() { return "Auth.class"; } /** * 判断该用户visitor是否有权限访问uri这个页面 * @param uri 所要访问的页面 * @param visitor 当前用户 * @return true 如果用户有权限, 否则返回false */ public boolean isAllow(String uri, Visitor visitor) { boolean isOk = true; // 预设为允许访问 if (_auths != null) { Set<String> keys = _auths.keySet(); for (String key : keys) { if (uri.indexOf(key) != -1) { // 如果发现权限页面,而用户没有登录系统时,则返回false if (visitor == null || !visitor.isLogin()) { return false; } // 如果发现权限页面,则设为false,直到找到用户配匹的用户组 isOk = false; // 如果用户为管理员 if (getComApplication().isAdmin(visitor.getUser().getId())) { return true; } // 当用户所在的用户组配匹于权限设置中的用户组, // 同时该用户的用户组并非admin时,直接返回true // !group.equals(Constants.GROUP_ADMIN) 阻止用户直接在数据库中定义admin类型 List<String> authGroups = _auths.get(key); String group = visitor.getUser().getGroup(); if (authGroups.contains(group) && !group.equals(Constants.GROUP_ADMIN)) { return true; } } } } return isOk; } /** * 获取页面权限配置信息 * 返回一个 Map类型,该Map 包含key(权限页面), value为一个list类型的集合, * 包含经过授权的用户组列表,即该用户组可访问该页面,for example:<br> * auths.get("pageURL") -> 取得授权的用户组列表ArrayList * @return auths */ public Map<String, List<String>> getAuths() { return _auths; } /** * 初始化权限页面,通过 ServletContext, 及权限配置文件路径 * 并设置applicationScope.authorizationFilter * 设置authFilter的属性 * @param authsPath 权限配置文件的路径 */ private void init(String authsPath){ try { _auths = new HashMap<String, List<String>>(); Document doc = XmlOper.getDocument(authsPath); Element root = doc.getDocumentElement(); NodeList authorizations = root.getElementsByTagName("auth"); for (int i = 0; i < authorizations.getLength(); i++) { Element auth = (Element) authorizations.item(i); // 获取权限页面的URI String uri = auth.getElementsByTagName("uri").item(0).getTextContent().trim(); List<String> groupsList = new ArrayList<String>(); Element userGroups = (Element) auth.getElementsByTagName("groups").item(0); NodeList groups = userGroups.getElementsByTagName("group"); for (int n = 0; n < groups.getLength(); n++) { String group = groups.item(n).getTextContent().trim(); if (group != null) { groupsList.add(group); // 设置可访问该页的用户组 } } // 设置权限页面 及 被授权的用户组 _auths.put(uri, groupsList); } showState(); } catch (Exception e) { Elog.log("Exception:Auth:init:" + e.getMessage()); } } public void showState() { Set<String> keys = _auths.keySet(); for (String key : keys) { System.out.println("--key:" + key); List<String> groups = _auths.get(key); for (String group : groups) { System.out.println("group:" + group); } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -