java linux 权限管理_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;

}

//第一,必须要登录

// 取得当前用户;

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只给出了部分内容,不过所有的内容都包括了。

0,1

0,

0,1

all,

all,

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;

超级管理员给每一个用户分配权限,然后添加到该张表中。登录用户根据自己的权限可以判断是否显示该功能。0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值