设为首页 加入收藏

TOP

Java 实现权限管理的两种方式(一)
2014-11-24 03:06:21 来源: 作者: 【 】 浏览:2
Tags:Java 实现 权限 管理 方式

第一种方式:利用filter、xml文件和用户信息表配合使用来实现权限管理。


1.过滤器filter


package cn.com.aaa.bbb.filter;


import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;


import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


import cn.com.aaa.bbb.domain.User;
import cn.com.aaa.bbb.util.HttpUtils;


/**
* 过滤:后台管理的模块授权。根据:配置文件xml,根据当前session中用的管理员信息。
* 注:不用再访问数据库。也不需要再使用什么 bean 去判断。直接在这个类里就可以判断。
* @author cuiguangqiang
*
*/


public class ManagerAuthFilter implements Filter {
protected static final Log logger = LogFactory.getLog(ManagerAuthFilter.class);


public static final String MAPPING_FILE = "/WEB-INF/managerauthmapping.xml";


private ServletContext context = null;


private Map actions = new HashMap();


public void init(FilterConfig filterConfig) throws ServletException {
context = filterConfig.getServletContext();
if(context==null){
logger.error("unable to init as servlet context is null");
return;
}
loadConf();
logger.info("ManagerAuthFilter configure success.");
}


private void loadConf() {
InputStream inputStream = context.getResourceAsStream(MAPPING_FILE);
if (inputStream == null) {
logger.info("unable find auth mapping file " + MAPPING_FILE);
} else {
actions = parseConf(inputStream);
}
}


private Map parseConf(InputStream inputStream) {
try {
SAXReader reader = new SAXReader();
Document document = reader.read(inputStream);
return createActionMap(document);


} catch (Exception e) {
logger.info(e.getMessage());
e.printStackTrace();
}
return new HashMap();
}


private Map createActionMap(Document document) {
Map map = new HashMap();
Element root = document.getRootElement();
//处理XML,读入JAVA Object对象中。
List actionList = root.elements();
for (Iterator it = actionList.iterator(); it.hasNext();) {
Element e = (Element) it.next();


String actionName = e.attributeva lue("name");

String auth_value = e.element("auth-value").getTextTrim();
map.put(actionName,auth_value);
logger.info(actionName + " is " + auth_value);
}
return map;
}


public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//处理某次提交的Action,是否在权限定义范围内
//权限共有:1:站长;2:编辑;0:Admin ; all 代表所有人都可以。(均需要登录)

HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
//(1)得到此次用户的提交请求

String url = req.getServletPath();
//(2)只有在配置文件中存在的 action 才进行处理
String method = req.getParameter("method");
if(method!=null){
url = url + " method=" + method;
}
String auth_value = (String)actions.get(url);

if(auth_value==null){
logger.info("action is not in Manager Auth xml.");
chain.doFilter(request, response);
return;
}
//第一,必须要登录
// 取得当前用户;
User ma

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇在Ubuntu环境下成功编译C#--一个.. 下一篇FLASH与服务器通讯 (JAVA)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Announcing October (2025-12-24 15:18:16)
·MySQL有什么推荐的学 (2025-12-24 15:18:13)
·到底应该用MySQL还是 (2025-12-24 15:18:11)
·进入Linux世界大门的 (2025-12-24 14:51:47)
·Download Linux | Li (2025-12-24 14:51:44)