编辑特别推荐:

种方式:利用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.attributeValue("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;

}

来源:考试大-Java认证

责编:xxm  评论 纠错

上一页1

java实现权限_Java实现权限管理的两种方式相关推荐

  1. java多线程区别_Java中实现多线程的两种方式之间的区别

    Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对象描述了一个单独的线程.要产生一个线 ...

  2. java 生成二维码 QRCode、zxing 两种方式

    版权声明:本文为 testcs_dn(微wx笑) 原创文章,非商用自由转载-保持署名-注明出处,谢谢. https://blog.csdn.net/testcs_dn/article/details/ ...

  3. 19、Java并发编程:线程间协作的两种方式:wait、notify、notifyAll和Condition

    Java并发编程:线程间协作的两种方式:wait.notify.notifyAll和Condition 在前面我们将了很多关于同步的问题,然而在现实中,需要线程之间的协作.比如说最经典的生产者-消费者 ...

  4. 实现日志管理的两种方式:aop、拦截器

    一.Spring aop 实现 AOP概念: 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象.事务管理是Java应用程序中一个关于横切关注点的很好的例子.在Spring AOP ...

  5. java jframe添加面板_JFrame添加组件的两种方式

    对JFrame添加组件有两种方式:1) 用getContentPane()方法获得JFrame的内容面板,再对其加入组件:frame.getContentPane().add(childCompont ...

  6. Spring中进行事务管理的两种方式

    1.Spring中事务管理的API 事务是指逻辑上要么全部成功.要么全部失败的一组操作.例如用户A给用户B转账,则用户A账户余额减少.用户B账户增加这两个操作就是一组事务,必须全部成功或失败撤回操作, ...

  7. spring支持事务管理的两种方式

    转载:https://blog.csdn.net/bao19901210/article/details/41724355 事物管理对于企业应用来说是至关重要的,好使出现异常情况,它也可以保证数据的一 ...

  8. javax消息队列_java实现消息队列的两种方式(小结)

    实现消息队列的两种方式 Apache ActiveMQ官方实例发送消息 下载解压后拿到java代码实例 然后倒入IDE 如下: 请认真阅读readme.md文件,大致意思就是把项目打成两个jar包,然 ...

  9. 事务管理--(Spring两种方式)

    一.什么是事务? 事务是由步数据库操作序列组成的逻辑执行单元,这系列操作要么全部执行,要么全部放弃执行 二.事务的特性(ACID) 1. 原子性 事务是一个不可分割的最小工作单位,事务中的操作要么都发 ...

最新文章

  1. php 链接多个mysql_PHP同时操作多个MySQL连接
  2. ROS系统 参数的获取和设置
  3. 使用深度学习解决拍照文档复杂背景二值化问题
  4. addeventlistener不支持ajax_十万个Web前端面试题之AJAX、axios、fetch的区别
  5. 贪心/栈 - 去除重复字母
  6. C# 读写ACCESS的OLE对象,演示图片与长文件的读写
  7. 为什么BDLocationListener没有被调用
  8. [转]Win7 系统安装VS2008没反应 点击安装一闪就没有反应 .
  9. android 获取monkey日志_Monkey日志如何分析
  10. 单商户商城系统功能拆解13—分类管理
  11. ORL、Yale等人脸数据库百度云链接
  12. 平板触控笔有哪些用途?实用平板电脑手写电容笔推荐
  13. RPG Maker mv框架代码解析之窗口图片显示
  14. 深度学习平台的搭建(anaconda-pytorch-pycharm)
  15. wps分享为什么要登入_靠谱租分享:为什么要在年前租办公室
  16. 北航计算机复试英语,考研并不困难:北航计算机考研之路
  17. java的login_Java login登陆界面设计
  18. C++ Primer Plus 自学第六章结尾编程9题
  19. tlm::tlm_analysis_port tlm::tlm_analysis_if
  20. 2020清华大学计算机系夏令营机试

热门文章

  1. 云存储精华问答 | 云存储是如何工作的?
  2. 强推!盘点阿里巴巴 15 款开发者工具 | 程序员硬核评测
  3. react如何获取表单数据
  4. es6 箭头函数 rest参数 扩展运算符
  5. 爬虫爬到的网页源代码不是真正的源代码_Python爬虫经常爬不到数据?你可以看一下这篇文章...
  6. pdo mysql 和 mysqli_PHP中MySQL、MySQLi和PDO的用法和区别
  7. java变位词_GoLang 字符串变位词
  8. npm ERR! cb() never called!
  9. Mysql代码生成器转Oracle代码生成
  10. VBA FSO 对象模型知识点梳理