java实现权限_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.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/529988.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java 输入16进制_尝试使用十六进制输入来使用小端和大端

我试图用这两个原型编写C函数:int extract_little (char* str, int ofset, int n);int extract_big(char* str, int ofset, int n);现在一般的想法是我需要从地址str ofset开始以两种格式返回一个n字节整数 . 附: Ofset还没有做任何事情,我计…

java gson_Java 中 Gson的使用

JSON 是一种文本形式的数据交换格式,它比XML更轻量、比二进制容易阅读和编写,调式也更加方便;解析和生成的方式很多,Java中最常用的类库有:JSON-Java、Gson、Jackson、FastJson等一、Gson的基本用法Gson提供了fromJson() 和toJson…

spring注入普通java类_普通java类如何取得注入spring Ioc容器的对象

[除了使用XML配置外,还可以选择使用基于注解(annotation)的配置方式,其依赖于字节码来织入组件。注解注入在XML注入之前完成,因此在XML配置中可以重载注解注入的属性。一、建一个SpringUtil类package com.ceopen.eoss.spring; import org.spr…

java web 集成dom4j_[JavaWeb基础] 031.dom4j写入xml的方法

上一篇我们讲述了dom4j读取xml的4种方法,甚是精彩,那么怎么样写入xml呢?我们直接看下源码实现。public static void main(String[] args) throws Exception {// 创建文档Document document DocumentHelper.createDocument();// 设置编码docu…

java servlet 调试日志 logger sae_java servlet 调试日志 lo

java servlet 调试日志 lo[2021-02-10 08:32:08] 简介:php去除nbsp的方法:首先创建一个PHP代码示例文件;然后通过“preg_replace("/(\s|\&nbsp\;| |\xc2\xa0)/", " ", strip_tags($val));”方法去除所有nbsp即可。推荐&#x…

java接口权限管理在哪里_java访问权限控制

为什么java要有访问权限的控制?访问权限的设置和代码的重构有关。在一个项目中,大多数的时间和金钱都投入到了代码的维护当中。维护中一定会修改已存在的不合理的代码。但是在重构的过程中,就出现了这样的问题:如何保证不影响那些使用了待修…

java8 stream index_Java8的stream用法整理

/***authorindex* date 2020/10/27**/public classTestcollectingAndThen {Testpublic voidtest(){final int NUM 14;List peopleList new ArrayList<>(NUM);String[] names {"小张", "小龙", "小牛", "小猪", "小黑&quo…

memo、 useMemo 和 useCallback语法讲解

memo、 useMemo 和 useCallback 缓存组件, 对组件浅比较 (只有组件的props, (对函数,引用要用useCallback包裹)发生变化 缓存值, 依赖项变化&#xff0c;会从新计算。 缓存函数, 依赖项变化,重新生成新函数 useMemo 语法 对返回的值缓存进行优化 const memoizedValue useMem…

java只修改变的字段_java注解之运行时修改字段的注解值操作

今天遇到需求&#xff1a;导入Excel时候列头会发生变化&#xff0c;客户是大爷要求你改代码&#xff0c;导入Excel是用easypoi做的&#xff0c;识别表头是用注解Excel(name "xxx")通过这个name来匹配那你表头要动&#xff0c;我这个注解是硬编码所以就有动态设置这个…

求java简单计算器源代码_java简单计算器源代码

简单计算器代码package calcultorthree;import java.awt.BorderLayout;//导入边界布局管理器类import java.awt.GridLayout;//导入网格布局管理器类import java.awt.TextField;//导入文本区域类import java.awt.event.ActionEvent;//导入事件类import java.awt.event.ActionLis…

java中间语言汇编语言_中间语言(IL) | 学步园

一、IL与汇编语言IL是微软.NET平台上衍生出的一门中间语言&#xff0c;.NET平台上的各种高级语言(如C#&#xff0c;VB&#xff0c;F#)的编译器会将各自的代码转化为IL。&#xff0c;其中包含了.NET平台上的各种元素&#xff0c;如“范型”&#xff0c;“类”、、“接口”、“模…

java遍历斐波纳契数列_详解循环、迭代、递归、分治(Leet Code 509 斐波那契数列),实际运用...

Multiple solutions of Fibonacci (Python or Java)本章是用英文写的&#xff0c;作为或想成为一名优秀的攻城狮&#xff0c;习惯阅读英文文档将使你受益良多。例如更好的查看最新版的官方文档、与国外友人交流、等等 其实英文的生词也并不多,其中90&#xff05;的英文都在代码…

java栈内存是先进后出吗_java堆内存与栈内存区别

栈(stack):是一个先进后出的数据结构,通常用于保存方法(函数)中的参数,局部变量. 在java中,所有基本类型和引用类型都在栈中存储.栈中数据的生存空间一般在当前scopes内(就是由{...}括起来的区域).栈的优势是&#xff0c;存取速度比堆要快&#xff0c;仅次于直接位于CPU中的寄存…

主页面功能的java_6-04-项目实战-主页面显示当前用户退出功能实现

教程列表&#xff1a;1-01-servlet学习-HTTP协议的概念作用和特点1-02-servlet学习-HTTP协议的交互流程和请求格式和请求方式1-03-servlet学习-HTTP协议的响应格式和常见状态码1-04-servlet学习-服务器介绍&tomcat服务器的安装和验证1-05-servlet学习-第一个web项目1-06-se…

java 二分查找 排序_java 冒泡排序 二分查找

下面这个程序是先定义一个整型数组&#xff0c;然后将其中的元素反序赋值&#xff0c;再用冒泡排序进行排序以后用二分查找来查找其中是否有某个数&#xff0c;返回值为-1时表示这个数可能小于这个数组的最小值或大小这个数组的最大值&#xff0c;-2表示这个数比这个数组的最小…

php 数组设置为空,PHP数组设置空值

如果没有数据存在&#xff0c;如何将数组值设置为null&#xff1f;PHP数组设置空值以下是我的PHP阵列和我JSON编码 -{"title":"Impalz-Marketing","type":"Business Details","version":"1.0","login":…

什么是写一个java类,Java什么是类?class的相关介绍

本章给大家带来Java什么是类&#xff1f;class的相关介绍&#xff0c;让大家了解关于类(class)的一些知识。有一定的参考价值&#xff0c;有需要的朋友可以参考一下&#xff0c;希望对你有所帮助。class Point{constructor(){}toString(){}}console.log(Object.keys(Point.prot…

windows php sqlite,如何在Apache 2.4(Windows 7)上为PHP 5.6.14配置SQLite3?

我在Windows 7上,在Apache 2.4上使用PHP 5.6.14版,我正在尝试访问SQLite3数据库.我正在……致命错误&#xff1a;找不到类“SQLite3”在这里你是一个简单的PHP代码…$db new SQLite3(phpdb);if ($db) {$db->query("CREATE TABLE dogbreeds (Name VARCHAR(255), MaxAge…

php 国密 签名,关于php国密SM3签名算法

推荐&#xff1a;《PHP视频教程》php国密SM3签名算法代码地址github.com/lizhichao/sm安装composer require lizhichao/one-sm使用require __DIR__ . /vendor/autoload.php; // 字符串签名 echo OneSmSm3::sign(abc) . PHP_EOL; echo OneSmSm3::sign(str_repeat("adfas哈哈…

matlab状态方程 传递函数 可控性,实验一matlab系统的传递函数和状态空间表达式的转换...

实验一 MATLAB 系统的传递函数和状态空间表达式的转换一、 实验目的1、学习多变量系统状态空间表达式的建立方法&#xff1b;2、通过编程、上机调试&#xff0c;掌握多变量系统状态空间表达式与传递函数之间相互转换的方法&#xff1b;3、掌握相应的MATLAB 函数。二、 实验原理…