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

    太搓了了  回復  更多評論   



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


    網站導航:
     
    主站蜘蛛池模板: 91精品国产亚洲爽啪在线影院| 亚洲免费网站在线观看| 亚洲私人无码综合久久网| 免费看成人AA片无码视频羞羞网| 久久久久国色AV免费看图片| 亚洲综合激情六月婷婷在线观看| 日韩精品极品视频在线观看免费| 日韩免费一级毛片| 亚洲hairy多毛pics大全| 免费黄网在线观看| 亚洲美女在线观看播放| 59pao成国产成视频永久免费| 亚洲国产精品线在线观看| 久久国产精品萌白酱免费| 国产精品国产自线拍免费软件| 亚洲αⅴ无码乱码在线观看性色| 国产一级淫片a免费播放口之| jzzjzz免费观看大片免费| 国产亚洲一区二区手机在线观看| 免费无码毛片一区二区APP| 亚洲免费黄色网址| 日本免费无遮挡吸乳视频电影| 日韩电影免费在线观看网址| 亚洲色精品vr一区二区三区| 91香蕉国产线在线观看免费| 日本亚洲色大成网站www久久| 亚洲精品99久久久久中文字幕 | 亚洲永久在线观看| 国产精品va无码免费麻豆| 亚欧乱色国产精品免费视频| 97久久精品亚洲中文字幕无码| 麻豆国产入口在线观看免费| 一级毛片完整版免费播放一区| 亚洲天堂在线播放| 日本一道本高清免费| 成人免费区一区二区三区| 亚洲综合av一区二区三区| 亚洲日韩国产一区二区三区| 黄网站色成年片大免费高清| 亚洲高清国产拍精品26U| 毛片免费在线观看网站|