系統(tǒng)安全一直是在系統(tǒng)開發(fā)中不可規(guī)避的問題,而權(quán)限控制又跟系統(tǒng)安全密不可分,那java權(quán)限管理怎么實現(xiàn)?接下來我們就來給大家講解一下java實現(xiàn)權(quán)限管理的方法。
利用filter、xml文件和用戶信息表配合使用來實現(xiàn)權(quán)限管理。第二種方式是利用專門的權(quán)限表來維護用戶權(quán)限,根據(jù)登錄的用戶的權(quán)限信息判斷謀個功能是否顯示在頁面上,來實現(xiàn)權(quán)限的控制。
第一種方式:利用filter、xml文件和用戶信息表配合使用來實現(xiàn)權(quán)限管理。
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; 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,是否在權(quán)限定義范圍內(nèi) //權(quán)限共有: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; } //第二,必須在權(quán)限定義范圍內(nèi) 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只給出了部分內(nèi)容,不過所有的內(nèi)容都包括了。
<? xml version = "1.0" encoding = "UTF-8" ? > <!-- 權(quán)限共有:0:Admin 具有所有權(quán)限包括增刪改用戶; 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,具體用戶表的信息有以下內(nèi)容,我用實體類來表示用戶表的信息,因為沒有表結(jié)構(gòu)了。
private String id; private String userId; private String username; private String password; private int lever = 1; private Date createDate;
所有的操作都顯示在頁面上,當點擊該操作時,才進行權(quán)限控制,拋出是否該用戶有沒有該功能的權(quán)限。
第二種方式:利用專門的權(quán)限表來維護用戶權(quán)限,根據(jù)登錄的用戶的權(quán)限信息判斷謀個功能是否顯示在頁面上,來實現(xiàn)權(quán)限的控制。
1.不用數(shù)據(jù)庫表了,我用實體類的屬性來表示。
private String id; private String employeeid; private String urlid; private String urlname;
超級管理員給每一個用戶分配權(quán)限,然后添加到該張表中。登錄用戶根據(jù)自己的權(quán)限可以判斷是否顯示該功能。
java實現(xiàn)權(quán)限管理的方法就是以上兩種方法,大家可以參考任意一種,根據(jù)自己的具體需求去選擇方法哦!最后大家如果想要了解更多java初識知識,敬請關(guān)注賦能網(wǎng)。
本文鏈接:
本文章“java權(quán)限管理怎么實現(xiàn)?具體操作”已幫助 68 人
免責聲明:本信息由用戶發(fā)布,本站不承擔本信息引起的任何交易及知識產(chǎn)權(quán)侵權(quán)的法律責任!
本文由賦能網(wǎng) 整理發(fā)布。了解更多培訓機構(gòu)》培訓課程》學習資訊》課程優(yōu)惠》課程開班》學校地址等機構(gòu)信息,可以留下您的聯(lián)系方式,讓課程老師跟你詳細解答:
咨詢熱線:4008-569-579