系统安全一直是在系统开发中不可规避的问题,而权限控制又跟系统安全密不可分,那java权限管理怎么实现?接下来我们就来给大家讲解一下java实现权限管理的方法。
利用filter、xml文件和用户信息表配合使用来实现权限管理。第二种方式是利用专门的权限表来维护用户权限,根据登录的用户的权限信息判断谋个功能是否显示在页面上,来实现权限的控制。
第一种方式:利用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;
超级管理员给每一个用户分配权限,然后添加到该张表中。登录用户根据自己的权限可以判断是否显示该功能。
java实现权限管理的方法就是以上两种方法,大家可以参考任意一种,根据自己的具体需求去选择方法哦!最后大家如果想要了解更多java初识知识,敬请关注奇Q工具网。
推荐阅读: