<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 閱讀(10035) 評論(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

    太搓了了  回復  更多評論   



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


    網站導航:
     
    主站蜘蛛池模板: 亚洲毛片在线观看| 亚洲嫩模在线观看| 亚洲狠狠色丁香婷婷综合| 免费在线观看h片| 亚洲成人黄色网址| 久久精品国产免费观看| 亚洲大香伊人蕉在人依线| 亚洲一级毛片免费在线观看| 亚洲精品偷拍无码不卡av| 色影音免费色资源| 亚洲精品GV天堂无码男同| 国产免费午夜a无码v视频| 一级毛片大全免费播放下载 | 亚洲精品动漫在线| 在线视频免费观看爽爽爽| 亚洲国产成人99精品激情在线| 成人爽A毛片免费看| 怡红院亚洲红怡院在线观看| 久久激情亚洲精品无码?V| 日本一道本不卡免费| 亚洲人成伊人成综合网久久| 在线播放高清国语自产拍免费| 曰批全过程免费视频免费看| 亚洲AV无码专区亚洲AV伊甸园 | 浮力影院第一页小视频国产在线观看免费 | rh男男车车的车车免费网站| 久久亚洲精品成人| 国产无人区码卡二卡三卡免费| 亚洲精品乱码久久久久久蜜桃图片| 又色又污又黄无遮挡的免费视| 国产精品高清免费网站| 亚洲黄色网址在线观看| 国产国产人免费人成免费视频 | 成人午夜免费视频| 久久亚洲国产精品成人AV秋霞| 在线中文高清资源免费观看| 国产免费牲交视频免费播放| 亚洲欧洲日产v特级毛片| 免费在线观看理论片| 在线观看免费中文视频| 怡红院亚洲红怡院在线观看|