提供3000多款全球软件/控件产品
针对软件研发的各个阶段提供专业培训与技术咨询
根据客户需求提供定制化的软件开发服务
全球知名设计软件,显著提升设计质量
打造以经营为中心,实现生产过程透明化管理
帮助企业合理产能分配,提高资源利用率
快速打造数字化生产线,实现全流程追溯
生产过程精准追溯,满足企业合规要求
以六西格玛为理论基础,实现产品质量全数字化管理
通过大屏电子看板,实现车间透明化管理
对设备进行全生命周期管理,提高设备综合利用率
实现设备数据的实时采集与监控
利用数字化技术提升油气勘探的效率和成功率
钻井计划优化、实时监控和风险评估
提供业务洞察与决策支持实现数据驱动决策
转帖|其它|编辑:郝浩|2010-08-30 12:01:28.000|阅读 669 次
概述:本文主要讲解Java实现权限管理的两种方式,希望对大家有用。
# 慧都年终大促·界面/图表报表/文档/IDE等千款热门软控件火热促销中 >>
第一种方式:利用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;
}
//第一,必须要登录
// 取得当前用户;
User manager = (User) HttpUtils.getAdminUserSession(req);
// 检查管理用户是否登录
if (manager == null) {
resp.sendRedirect(req.getContextPath()+"/sessionLost.do");
return;
}
//第二,必须在权限定义范围内
if(auth_value.indexOf("all")>=0){
chain.doFilter(request, response);//必须返回给上一层。
return ;
}
else{
// String currUserAuth = ","+Integer.toString( manager.getLever())+",";
String currUserAuth = Integer.toString( manager.getLever());
if(auth_value.indexOf(currUserAuth)>=0){
chain.doFilter(request, response);//必须返回给上一层。
return ;
}
else{
resp.sendRedirect(req.getContextPath()+"/accessdenied.do");
return ;
}
}
}
public void destroy() {
logger.info("in authfilter destroy");
}
}
2.xml文件
xml只给出了部分内容,不过所有的内容都包括了。
<?xml version="1.0" encoding="UTF-8"?>
<!--
权限共有:0:Admin 具有所有权限包括增删改用户; 1:站长 ;2:编辑;
-->
<mapping>
<!--xxxx管理模块xx列表,报名选手和历史比赛查询部分-->
<action name="/listallmatch.do"><auth-value>0,1</auth-value></action>
<action name="/matchManager.do"><auth-value>0,</auth-value></action>
<action name="/rewrite.do"><auth-value>0,1</auth-value></action>
<action name="/leftHome.do"><auth-value>all,</auth-value></action>
<action name="/login.do"><auth-value>all,</auth-value></action>
</mapping>
3.用户表里面有一个用来保存用户级别的字段level,具体用户表的信息有以下内容,我用实体类来表示用户表的信息,因为没有表结构了。
/** The composite primary key value.*/
private String id;
/**
* 用户编号
*/
private String userId;
/** The value of the simple username property. */
private String username;
/** The value of the simple password property. */
private String password;
/**
* 0:Admin;1:站长;2:编辑;
*/
private int lever=1;
/**
* 创建用户的日期
*/
private Date createDate;
所有的操作都显示在页面上,当点击该操作时,才进行权限控制,抛出是否该用户有没有该功能的权限。
第二种方式:利用专门的权限表来维护用户权限,根据登录的用户的权限信息判断谋个功能是否显示在页面上,来实现权限的控制。
1.不用数据库表了,我用实体类的属性来表示。
private String id;
/**
* 管理员id
*/
private String employeeid;
/**
*管理功能id
*/
private String urlid;
/**
* 功能名称
*/
private String urlname;
超级管理员给每一个用户分配权限,然后添加到该张表中。登录用户根据自己的权限可以判断是否显示该功能。
本站文章除注明转载外,均为本站原创或翻译。欢迎任何形式的转载,但请务必注明出处、不得修改原文相关链接,如果存在内容上的异议请邮件反馈至chenjj@pclwef.cn
文章转载自:网络转载面对“数字中国”建设和中国制造2025战略实施的机遇期,中车信息公司紧跟时代的步伐,以“集约化、专业化、标准化、精益化、一体化、平台化”为工作目标,大力推进信息服务、工业软件等核心产品及业务的发展。在慧都3D解决方案的实施下,清软英泰建成了多模型来源的综合轻量化显示平台、实现文件不失真的百倍压缩比、针对模型中的大模型文件,在展示平台上进行流畅展示,提升工作效率,优化了使用体验。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
本站的模型资源均免费下载,登录后即可下载。模型仅供学习交流,勿做商业用途。
服务电话
重庆/ 023-68661681
华东/ 13452821722
华南/ 18100878085
华北/ 17347785263
客户支持
技术支持咨询服务
服务热线:400-700-1020
邮箱:sales@pclwef.cn
关注我们
地址 : 重庆市九龙坡区火炬大道69号6幢