<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    wake

    JSP權限控制(二)

    今天把源代碼貼出來 按照代碼再加點解釋。

    ?

    1 )首先建立管理用戶表,其中 UserPopedom 記錄用戶的權限字符,其實也就是一些 JSP 或者 ACTION 的文件名:

    CREATE TABLE [dbo].[AdminUser] (

    ?????? [UserID] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

    ?????? [UserName] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

    ?????? [UserPass] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,

    ?????? [UserPopedom] [text] COLLATE Chinese_PRC_CI_AS NULL

    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]

    2 )按照上面的表格建立該用戶的對象

    package com.wake.bean;

    ?

    public class AdminUser {

    ???

    ??? private String UserID;

    ??? private String UserName;

    ??? private String UserPass;

    ??? private String UserPopedom;

    ???

    ??? public String getUserID() {

    ?????????? return UserID;

    ??? }

    ??? public void setUserID(String userID) {

    ?????????? UserID = userID;

    ??? }

    ??? public String getUserName() {

    ?????????? return UserName;

    ??? }

    ??? public void setUserName(String userName) {

    ?????????? UserName = userName;

    ??? }

    ??? public String getUserPass() {

    ?????????? return UserPass;

    ??? }

    ??? public void setUserPass(String userPass) {

    ?????????? UserPass = userPass;

    ??? }

    ??? public String getUserPopedom() {

    ?????????? return UserPopedom;

    ??? }

    ??? public void setUserPopedom(String userPopedom) {

    ?????????? UserPopedom = userPopedom;

    ??? }

    }

    3 )對整個后臺的控制我這里分為了兩部分,一部分是欄目的顯示控制,一部分是資源(頁面)的操作控制。

    其中欄目的顯示控制解釋為:以新聞欄目為例,如果某用戶沒有新聞欄目的任何管理權限(增、改、刪、申等),那么在后臺的管理菜單中將不顯示新聞欄目。否則,只要某用戶擁有其中任何一個權限,新聞欄目則顯示。這里要掌握的要領是,所有和新聞權限相關的頁面命名必須以 News 打頭,這樣將來決定顯示與否就以該用戶的權限字符中是否能找到 News 為依據。該功能的實現我寫了 Bean 來判斷。如下:

    package com.wake.util;

    ?

    import java.util.Map;

    ?

    import com.opensymphony.xwork.ActionContext;

    import com.wake.bean.AdminUser;

    ?

    public class PopedomValidate {

    ???

    ??? public static boolean UserPopedomValidate(String pstr){

    ?????????? Map session = ActionContext.getContext().getSession();

    ?????????? AdminUser auser = (AdminUser)session.get("auser");

    ?????????? if(auser==null||auser.equals("")){

    ????????????????? return false;

    ?????????? }

    ?????????? else{

    ????????????????? if(auser.getUserPopedom().indexOf(pstr)!=-1)

    ???????????????????????? return true;

    ?????????? }

    ?????????? return false;

    ??? }

    ?

    }

    在頁面中使用如下判斷(我是在 WEBWORK 中實現),也可在 JSP 中直接調用!

    <%@ taglib uri = "webwork" prefix = "ww" %>

    < ww:bean name = "'com.wake.util.PopedomValidate'" id = "pd" />

    < ww:if test = '#pd.UserPopedomValidate("News")' >

    新聞欄目 < br >

    </ ww:if >

    對于資源(頁面)的操作控制我是使用 Filter 來進行控制的, Filter 源碼如下。

    ?

    package com.wake.util;

    ?

    import java.io.IOException;

    ?

    import javax.servlet.Filter;

    import javax.servlet.FilterChain;

    import javax.servlet.FilterConfig;

    import javax.servlet.ServletException;

    import javax.servlet.ServletRequest;

    import javax.servlet.ServletResponse;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpSession;

    ?

    import com.wake.bean.AdminUser;

    ?

    /**

    ?* @author Administrator

    ?*

    ?*/

    public class PopedomControl extends HttpServlet implements Filter {

    ??? /**

    ??? ?*

    ??? ?*/

    ??? private FilterConfig filterConfig;

    ??? private static final long serialVersionUID = -4275105240038370264L;

    ?

    ??? /*

    ??? ?* (非 Javadoc

    ??? ?*

    ??? ?* @see javax.servlet.Filter#init(javax.servlet.FilterConfig)

    ??? ?*/

    ??? public void init(FilterConfig arg0) throws ServletException {

    ??? }

    ?

    ??? /*

    ??? ?* (非 Javadoc

    ??? ?*

    ??? ?* @see javax.servlet.Filter#doFilter(javax.servlet.ServletRequest,

    ??? ?*????? javax.servlet.ServletResponse, javax.servlet.FilterChain)

    ??? ?*/

    ??? public void doFilter(ServletRequest request, ServletResponse response,

    ?????????? FilterChain filterChain) {

    ?

    ?????? HttpServletRequest servletRequest = (HttpServletRequest) request;

    ?????? HttpServletResponse servletResponse = (HttpServletResponse) response;

    ?????? HttpSession session = servletRequest.getSession();

    ?????? // 獲取當前頁面文件名

    ?????? String url = servletRequest.getRequestURI();

    ?????? url = url.substring(url.lastIndexOf("/") + 1, url.length());

    ??????

    ?????? try {

    ?????????? // 排除后臺不作權限控制的頁面名

    ?????????? String exclude= "adminlogin.action,login.jsp,Message.jsp,loginout.jsp";

    ??? ?????? if(exclude.indexOf(url)==-1){

    ????????????? // 獲取網站訪問根目錄

    ????????????? String accessPath = servletRequest.getContextPath();

    ????????????? // 用當前頁面文件名與用戶權限字符比較

    ????????????? AdminUser adminuser = (AdminUser) session.getAttribute("auser");

    ????????????? if (adminuser == null) {

    ????????????????? servletResponse.sendRedirect(accessPath + "/admin/login.jsp");

    ????????????? }else if(adminuser.getUserPopedom().indexOf(url)==-1){

    ????????????????? servletResponse.sendRedirect(accessPath + "/admin/Message.jsp");

    ????????????? }

    ?????????? }

    ?????? } catch (Exception sx) {

    ?????????? sx.printStackTrace();

    ?????? }

    ??????

    ?????? try {

    ?????????? filterChain.doFilter(request, response);

    ?????? } catch (ServletException sx) {

    ?????????? filterConfig.getServletContext().log(sx.getMessage());

    ?????? } catch (IOException iox) {

    ?????????? filterConfig.getServletContext().log(iox.getMessage());

    ?????? }

    ??? }

    ?

    ??? public void destroy() {

    ??? }

    ?

    }

    WEB.XML 關于過濾器配置

    ??? < filter >

    ?????? < filter-name > popedomcontrol </ filter-name >

    ?????? < filter-class > com.wake.util.PopedomControl </ filter-class >

    ??? </ filter >

    ??? < filter-mapping >

    ?????? < filter-name > popedomcontrol </ filter-name >

    ?????? < url-pattern > /admin/* </ url-pattern >

    ??? </ filter-mapping >

    ?

    這樣不知道大家看明白沒有

    ?

    這次這個簡單的權限設計從開始到完成斷斷續續用了將近 3 天的時間,一切都是在摸索中進行。其實上面的設計思路經過優化和復雜化也可以設計為符合 RBAC 規范的例子。那需要我們在用戶和權限之間再加一個基本的角色進去。這樣用戶對應的是角色,而角色去對應權限。至于其它的就由我們自己自由發揮了呵呵,這次關于權限的試驗就到此了,讓大家見笑了。

    posted on 2006-04-29 17:18 wake 閱讀(10033) 評論(15)  編輯  收藏

    Feedback

    # re: JSP權限控制(二) 2006-04-29 21:20 Jonney

    如果在開發過程中頁面名字要改變,那豈不是很麻煩?  回復  更多評論   

    # re: JSP權限控制(二) 2006-05-06 00:19 huifei

    建個資源文件,以數字對應文件,再進行驗證。見過有一個系統曾是這樣設計。  回復  更多評論   

    # re: JSP權限控制(二) 2006-05-08 10:52 bladefenix

    樓主很厲害!
    權限控制這個東西看似簡單 實際上如果真要自己去實現還是比較復雜
    幸運的是關于權限管理有很多開源方案可以使用.
      回復  更多評論   

    # re: JSP權限控制(二) 2006-05-10 13:20 wake

    @Jonney
    我當初考慮到了這個問題,但任何一種實現方法都有它的缺陷和規則,而且這也只是一個初步的設計。其實按照二樓的那個方法就可以比較好的解決這個問題。歡迎討論...  回復  更多評論   

    # re: JSP權限控制(二) 2006-05-10 13:22 wake

    @bladefenix
    厲害實在不敢當,不懂的地方實在太多太多了,這幾天去應聘好多基本的問題都回答錯了呵呵,一起學習
      回復  更多評論   

    # re: JSP權限控制(二) 2006-05-16 07:52 jenos

    這樣做的確很麻煩,其實可以有多個用例,管理員,瀏覽者等,只要進行用戶角色認證之后即可用Filter來進行過濾,請求的權限了。  回復  更多評論   

    # re: JSP權限控制(二) 2006-06-18 17:29 ddddf

    fdgrarerew  回復  更多評論   

    # re: JSP權限控制(二) 2006-08-15 10:01 fasdf

    看不明白  回復  更多評論   

    # re: JSP權限控制(二) 2006-10-30 23:51 kwx

    嗯,看了看,可以借鑒一下!覺得二樓說的有道理,再加一個配置文件用來對應JSP文件名會更好,不過這也只是樓主的一個簡單設計,就一些簡單的應用還是可以參考一下的!  回復  更多評論   

    # re: JSP權限控制(二) 2007-01-05 19:38 一手的小窩窩

    這仿佛有問題呵呵,我之前也這樣做過但是,其實,當前請求,雖然被攔截了,,但實際上它還是會把本次請求執行完成的呵.  回復  更多評論   

    # re: JSP權限控制(二) 2007-08-13 21:36 haoland

    以前也這樣想過,但感覺這個方法有點笨,這幾天正在做權限,想做一個方便實用的方法,一起提高吧.  回復  更多評論   

    # re: JSP權限控制(二) 2008-03-07 09:23 七喜可樂

    強,汗,又強又汗。牛人阿!  回復  更多評論   

    # re: JSP權限控制(二)[未登錄] 2008-06-11 15:34 knight

    很好很強大,嘗試中。。  回復  更多評論   

    # re: JSP權限控制(二) 2008-10-21 19:23 xiaomeng

    very good!  回復  更多評論   

    # re: JSP權限控制(二) 2008-12-29 19:41 MM

    太搓了了  回復  更多評論   



    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 毛片a级毛片免费观看免下载| 99久久免费观看| 国产免费无码AV片在线观看不卡| 免费h视频在线观看| 日韩在线播放全免费| 性色av无码免费一区二区三区| 国产精品免费小视频| 国产亚洲人成网站在线观看| 久久综合图区亚洲综合图区| 亚洲三级在线播放| 男男黄GAY片免费网站WWW| 热久久这里是精品6免费观看| 亚洲电影在线免费观看| 可以免费观看的一级毛片| 亚洲亚洲人成综合网络| 18亚洲男同志videos网站| 亚洲精品亚洲人成在线 | 亚洲丁香色婷婷综合欲色啪| 亚洲av午夜精品无码专区| 国产成人高清亚洲一区91| 久久久99精品免费观看| 无码视频免费一区二三区| 亚洲人成无码久久电影网站| 亚洲综合久久成人69| 精品女同一区二区三区免费播放| 麻豆精品不卡国产免费看| 午夜寂寞在线一级观看免费| 亚洲日韩中文字幕在线播放| 亚洲熟妇自偷自拍另欧美| 成在线人免费无码高潮喷水| 最近免费中文字幕大全视频| 亚洲色自偷自拍另类小说| 国产成人精品日本亚洲11| 一级毛片免费毛片毛片| 黄在线观看www免费看| 亚洲一区二区三区免费| 最新国产成人亚洲精品影院| 成人电影在线免费观看| 国产日产成人免费视频在线观看| 久久久无码精品亚洲日韩蜜桃 | 色婷婷7777免费视频在线观看|