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

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

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

    隨筆-39  評論-33  文章-0  trackbacks-0

    說明:newxyweb快速開發(fā)框架,下文說明了如果利用標(biāo)簽實(shí)現(xiàn)訪問控制。第一、二、三項(xiàng)中的用戶管理、業(yè)務(wù)管理、業(yè)務(wù)分配可下載《部門及用戶權(quán)限管理(第三版)來實(shí)現(xiàn)。第四、五項(xiàng)介紹了用戶登錄過程獲取業(yè)務(wù)操作權(quán)限信息,及如何實(shí)現(xiàn)訪問控制。第六項(xiàng)的登錄頁面login.jsp可作參考。

    下載: <nbean:right/> 標(biāo)簽實(shí)現(xiàn)訪問控制 http://www.newxy.net/zh_cn/download/index.jsp

    ?

    web 開發(fā)中,難免要對一些頁面進(jìn)行訪問控制, newxy <nbean:right/> 可以幫助建立兩種訪問控制方法,首先建立三個(gè)表。

    ?? ? 一、建立用戶、業(yè)務(wù)、用戶業(yè)務(wù)關(guān)系表

    /* 用戶表 */

    create table t_user(

    ? user_id int primary key,

    ? user_name varchar(50) not null,

    ? user_pass varchar(50) not null

    )

    ;

    /* 用戶名的唯一索引 */

    create unique index idx_user_name on t_user(user_name)

    ;

    ?

    /* 業(yè)務(wù) */

    create table t_business(

    ??? business_id int primary key,

    ??? title varchar(255) not null,

    ??? intro text null,

    ??? type int null /* 分類 */

    )

    ;

    create unique index idx_business on t_business(title)

    ;

    ?

    /* 用戶 - 業(yè)務(wù) */

    create table r_user_business(

    ??? user_business_id int primary key,

    ??? user_id int not null,

    ??? business_id int not null,

    ??? find char(1) default '1',

    ??? remove char(1) default '0',

    ??? upinsert char(1) default '0',

    ??? scope char(1) default '0',/* 操作范圍 ,0: 頂級單位范圍內(nèi) ,1: 本部門內(nèi) */

    ??? type int null /* 分類 */

    )

    ;

    create unique index idx_user_business on r_user_business(user_id,business_id)

    ;

    表結(jié)構(gòu)可自定,此處的定義只作參考。

    二、設(shè)定業(yè)務(wù)

    假設(shè)有三個(gè) jsp 頁面,分別是 /jsp1.jsp /jsp2.jsp /jsp3.jsp 。上有三項(xiàng)業(yè)務(wù),暫以 jsp 文件名作為業(yè)務(wù)名,插入三條記錄。

    ??????? BaseDAO dao=new BaseDAO();

    ??????? DynaDto dto=new DynaDto();

    ??????? dto.set_table("t_business");

    ??????? dto.set(“title”,”jsp1”);

    ??????? dao.update(dto);

    ??????? dto= new DynaDto();

    ??????? dto.set_table("t_business");

    ??????? dto.set(“title”,”jsp2”);

    ??????? dao.update(dto);

    ??????? dto= new DynaDto();

    ??????? dto.set_table("t_business");

    ??????? dto.set(“title”,”jsp3”);

    ??????? dao.update(dto);

    ?

    ??? 三、分配權(quán)限

    建一權(quán)限管理模塊,維護(hù) " 用戶 - 業(yè)務(wù) " 表。假設(shè)有一用戶的 user_id=1 ,有一業(yè)務(wù)的 business_id=1 ,可分兩種情況:

    1.? 業(yè)務(wù)操作只分有權(quán)和無權(quán)

    賦給該用戶操作權(quán)限,只需插入一條記錄

    ??????? BaseDAO dao=new BaseDAO();

    ??????? DynaDto dto=new DynaDto();

    ??????? dto.set_table("r_user_business");

    ??????? dto.set(“user_id”,”1”);

    ??????? dto.set(“business_id”,”1”);

    ?????? dao.update(dto);

    ??? 刪除該用戶權(quán)限,只需刪除這條記錄

    ??? String sql=”delete from r_user_right where user_id=1 and business_id=1;”

    ??? dao.prepareCall(sql);

    2.? 業(yè)務(wù)操作分多種情況,如查詢、刪除、插入更新等

    ??? 設(shè)定該用戶查詢權(quán)

    ??????? BaseDAO dao=new BaseDAO();

    ??????? DynaDto dto=new DynaDto();

    ??????? dto.set_table("r_user_business");

    ??????? dto.set(“user_id”,”1”);

    ??????? dto.set(“business_id”,”1”);

    ??????? dto.set(“find”,”0”); // dto.set(“find”,”1”); 0: 無權(quán), 1: 有權(quán)

    ??????? dao.update(dto);

    ??? 設(shè)定該用戶刪除權(quán)

    ??????? BaseDAO dao=new BaseDAO();

    ??????? DynaDto dto=new DynaDto();

    ??????? dto.set_table("r_user_business");

    ??????? dto.set(“user_id”,”1”);

    ??????? dto.set(“business_id”,”1”);

    ??????? dto.set(“remove”,”0”);// dto.set(“remove”,”1”); 0: 無權(quán), 1: 有權(quán)

    ??????? dao.update(dto);

    ??? 設(shè)定該用戶插入更新權(quán)

    ??????? BaseDAO dao=new BaseDAO();

    ??????? DynaDto dto=new DynaDto();

    ??????? dto.set_table("r_user_business");

    ??????? dto.set(“user_id”,”1”);

    ??????? dto.set(“business_id”,”1”);

    ??????? dto.set(“upinsert”,”0”);//dto.set(“upinsert”,”1”); 0: 無權(quán), 1: 有權(quán)

    ??????? dao.update(dto);

    ?

    ??? 四、用戶登錄時(shí)在會話中建立有關(guān)權(quán)限 bean

    ??? 在用戶登錄時(shí)對用戶名及口令驗(yàn)證,如果成功,在會話中加入權(quán)限 bean

    假設(shè)這過程是在 struts action 中完成的, struts 配置如下:

    <?xml version="1.0" encoding="UTF-8"?>

    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.1//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd">

    <struts-config>

    ? <global-forwards>

    ??? <forward name="index" path="/index.jsp" />

    ? </global-forwards>

    ? <action-mappings>

    ??? <action input="/login.jsp" parameter="method" path="/actionLogin" type="test.ActionLogin" />

    ? </action-mappings>

    </struts-config>

    ?

    有一個(gè) action ,登錄用,這個(gè) action 沒有 formBean

    這個(gè)用于登錄的 action 類如下:

    package action;

    ?

    import java.util.List;

    import javax.servlet.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import org.apache.struts.action.ActionMapping;

    import org.apache.struts.action.ActionForm;

    import org.apache.struts.action.ActionForward;

    import org.apache.struts.action.Action;

    import org.apache.commons.beanutils.DynaBean;

    import net.newxy.dbm.BaseDAO;

    ?

    public class ActionLogin extends Action {

    ??? public ActionForward execute(ActionMapping actionMapping,

    ?????????????????????????????? ActionForm actionForm,

    ?????????????????????????????? HttpServletRequest servletRequest,

    ?????????????????????????????? HttpServletResponse servletResponse) {

    ??????? BaseDAO dao=new BaseDAO();

    ??????? String user=servletRequest.getParameter("user_name");

    ??????? String pass=servletRequest.getParameter("user_pass");

    ??????? String sql="select * from t_user where user_name='"

    ?????????????????? +user+"' and user_pass='"+pass+"'";

    ??????? // 驗(yàn)證過程是判斷數(shù)據(jù)庫中是否保存了此用戶

    ??????? List list=null;

    ??????? try {

    ??????????? list = dao.list(sql);

    ??????????? if(list.size()==0){

    ??????????????? // 沒查到此用戶,返回到登錄頁面

    ??????????????? servletRequest.setAttribute("message"," 用戶名或口令錯(cuò)誤! ");

    ??????????????? return actionMapping.getInputForward();

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

    ??????? }

    ??????? catch (Exception ex) {

    ??????????? // 發(fā)生錯(cuò)誤,返回到登錄頁面

    ??????????? servletRequest.setAttribute("message"," 用戶登錄時(shí)發(fā)生錯(cuò)誤! "+ex.getMessage());

    ??????????? return actionMapping.getInputForward();

    ??????? }

    ?

    ??????? // 執(zhí)行到此處表明 list.size>0 ,用戶存在于數(shù)據(jù)庫中,

    ??????? DynaBean bean=(DynaBean)list.get(0);

    ??????? servletRequest.getSession(false).setAttribute("user",bean);

    ?

    ??????? // 將用戶的權(quán)限信息提取出,保存到會話中。

    ??????? sql="select c.*, b.find,b.remove,b.upinsert from t_user a,r_user_business b,t_business c where a.user_name='"

    ??????????? +user+"' and a.user_id=b.user_id and b.business_id=c.business_id";

    ??????? try {

    ??????????? list = dao.list(sql);

    ??????????? servletRequest.getSession(false).setAttribute("right",list);

    ??????? }

    ??????? catch (Exception ex1) {

    ??????? }

    ??????? return actionMapping.findForward("index");

    ??? }

    }

    用戶登錄成功后會話中的 user 保存了戶用戶基本信息, right 保存了用戶的權(quán)限信息。

    right _coll 屬性是集合類型,結(jié)構(gòu)如下:

    Business_id

    title

    find

    remove

    upinsert

    1

    Jsp1

    0

    0

    0

    2

    Jsp2

    1

    1

    1

    ?

    五、使用 <nbean:right/>

    假設(shè)對 jsp1.jsp 的訪問只分有權(quán)和無權(quán),可在 jsp1.jsp 上放上 <nbean:right/> 標(biāo)簽:

    <%@ page contentType="text/html; charset=GBK" %>

    <%@ taglib uri="/WEB-INF/newxy-bean.tld" prefix="nbean"%>

    ?

    <nbean:right name="right" fieldName="business_id" fieldValue="1"/> ?

    ?

    <html>

    <head>

    <title>

    jsp1

    </title>

    </head>

    <body bgcolor="#ffffff">

    ?? ……

    </body>

    </html>

    ??? 標(biāo)簽在會話中找到名為“ right ”的 bean 后,在 bean _coll 中以 business_id 為字段名,以 ”1” 為字段值查找,如果找到,表明有權(quán),后面代碼繼續(xù),如果找不到,表明無權(quán),打印出“沒有權(quán)限”或自定義的提示信息,后面代碼被忽略。

    ??? 如果會話已過期,標(biāo)簽會提示,并且后面內(nèi)容不再顯示,以免出錯(cuò)。

    ?

    ? ? 假設(shè)對 jsp2.jsp 的訪問分查詢、刪除、插入更新。可在 jsp2.jsp 頁上加入 <nbean:right/> 如下:

    ?

    <%@ page contentType="text/html; charset=GBK" %>

    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

    ?

    <%@ taglib uri="/WEB-INF/newxy-html.tld" prefix="nhtml"%>

    <%@ taglib uri="/WEB-INF/newxy-logic.tld" prefix="nlogic"%>

    <%@ taglib uri="/WEB-INF/newxy-bean.tld" prefix="nbean"%>

    ?

    <nbean:right name="right" fieldName="business_id" fieldValue="2"/>

    ?

    <html>

    <head>

    <title>

    jsp2

    </title>

    </head>

    <body bgcolor="#ffffff">

    <logic:equal value="1" name="var1">

    ? <font size="3" color="blue"> 有只讀權(quán) </font>

    </logic:equal>

    <logic:equal value="2" name="var1">

    ? <font size="3" color="blue"> 有讀寫權(quán) </font>

    </logic:equal>

    <h3>

    ? 本頁文件: jsp2.jsp

    ? <logic:present name="user" scope="session">

    ??? ,用戶: <bean:write name="user" property="user_name"/>

    ? </logic:present>

    </h3>

    ?

    <hr />

    可在“有權(quán)”的地方插入相關(guān)代碼

    <p></p>

    ?

    <nbean:right name="right" fieldName="business_id" fieldValue="2" lookupField="find" var="varFind"/>

    <logic:equal value="0" name="varFind">

    ? 無查詢權(quán) <br />

    </logic:equal>

    <logic:equal value="1" name="varFind">

    ? 有查詢權(quán) <br />

    </logic:equal>

    ?

    <nbean:right name="right" fieldName="business_id" fieldValue="2" lookupField="remove" var="varRemove"/>

    <logic:equal value="0" name="varRemove">

    ? 無刪除權(quán) <br />

    </logic:equal>

    ?

    <logic:equal value="1" name="varRemove">

    ? 有刪除權(quán) <br />

    </logic:equal>

    ?

    <nbean:right name="right" fieldName="business_id" fieldValue="2" lookupField="upinsert" var="varUpInsert"/>

    <logic:equal value="0" name="varUpInsert">

    ? 無插入更新權(quán) <br />

    </logic:equal>

    ?

    <logic:equal value="1" name="varUpInsert">

    ? 有插入更新權(quán) <br />

    </logic:equal>

    </body>

    </html>

    ?

    標(biāo)簽在會話中找到名為“ right ”的 bean 后,在 bean _coll 中以 ”business_id” 為字段名,以 ”1” 為字段值查找,如果找不到,表明無權(quán),打印出“沒有權(quán)限”或自定義的提示信息,后面代碼被忽略。如果找到這條記錄,以屬性 var 的屬性值 ( ”varFind”) 為變量,將 lookupField 屬性值(如 “find” )為字段名的值賦給此變量,保存到 toScope 中。

    標(biāo)簽得到名為 “varFind” bean 后,根據(jù) varFind 的值是 0 還是 1 ,判斷用戶是否有查詢權(quán)。

    ?

    六、參考頁面

    登錄頁面 login.jsp 代碼:

    <%@ page contentType="text/html; charset=GBK" %>

    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

    <%@ taglib uri="/WEB-INF/struts-tiles.tld" prefix="tiles" %>

    <html>

    <head>

    <title>

    login

    </title>

    </head>

    <body bgcolor="#ffffff">

    <h1>

    登錄

    </h1>

    ?

    <!-- 顯示用戶登錄失敗時(shí)的提示信息 -->

    <logic:notEmpty name="message" scope="request">

    ? ?<bean:write name="message"/>

    </logic:notEmpty>

    <hr />

    <form method="post" action="/MyWeb/actionLogin.do">

    ? <input type="text" name="user_name"/>

    ? <input type="text" name="user_pass"/><br />

    ? <input type="submit" name="Submit" value=" 登錄 ">

    ? <input type="reset" value=" 取消 ">

    </form>

    </body>

    </html>

    ?

    主頁面 index.jsp 代碼:

    <%@ page contentType="text/html; charset=GBK" %>

    <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %>

    <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

    <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %>

    ?

    <%@ taglib uri="/WEB-INF/newxy-html.tld" prefix="nhtml"%>

    <%@ taglib uri="/WEB-INF/newxy-logic.tld" prefix="nlogic"%>

    <%@ taglib uri="/WEB-INF/newxy-bean.tld" prefix="nbean"%>

    ?

    <html>

    <head>

    <title>

    index

    </title>

    </head>

    <body bgcolor="#ffffff">

    <h1>

    ? 主頁面

    ? <logic:present name="user" scope="session">

    ??? ,用戶: <bean:write name="user" property="user_name"/>

    ? </logic:present>

    </h1>

    <logic:notEmpty name="message" scope="request">

    ? <bean:write name="message"/>

    </logic:notEmpty>

    <hr />

    <logic:present name="right" scope="session">

    ? <ul>

    ??? <li>

    ????? <html:link page="/jsp1.jsp">jsp1.jsp

    ????? </html:link>

    ??? </li>

    ??? <li>

    ????? <html:link page="/jsp2.jsp">jsp2.jsp

    ????? </html:link>

    ??? </li>

    ??? <li>

    ????? <html:link page="/jsp3.jsp">jsp3.jsp

    ????? </html:link>

    ??? </li>

    ? </ul>

    </logic:present>

    <logic:notPresent name="right" scope="session">

    ? <html:link page="/login.jsp"> 登錄

    ? </html:link>

    </logic:notPresent>

    </body>

    </html>

    ?

    ?

    newxy 新坐標(biāo)網(wǎng)站: http:/www.newxy.net

    ?

    posted on 2007-03-04 09:17 newxy新坐標(biāo) 閱讀(1656) 評論(1)  編輯  收藏

    評論:
    # hclplfrb 2007-06-14 09:53 | hclplfrb
    fmdmqrsf http://wypryorc.com iehdrbcu xvcsyktz  回復(fù)  更多評論
      

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲国产日韩在线成人蜜芽| 7m凹凸精品分类大全免费| 亚洲av专区无码观看精品天堂 | 午夜成人无码福利免费视频| 中文字幕亚洲综合精品一区| 亚洲综合色区在线观看| 德国女人一级毛片免费| 精品熟女少妇av免费久久| 精品国产免费一区二区三区| 亚洲av成人中文无码专区| 亚洲国产精品yw在线观看| 亚洲国产精华液网站w| 亚洲日韩人妻第一页| 日本高清免费网站| 免费三级毛片电影片| 97国产在线公开免费观看| 青青操免费在线视频| 一级毛片完整版免费播放一区| 亚洲AV无码资源在线观看| 亚洲中文久久精品无码1| 亚洲一区精品中文字幕| 精品久久久久久亚洲| 亚洲伊人成无码综合网 | 97se亚洲国产综合自在线| 久久久久亚洲AV无码专区首| 久久精品夜色噜噜亚洲A∨| 免费人成在线观看视频播放 | 国产成人亚洲精品蜜芽影院| 一本色道久久88亚洲精品综合| 亚洲国产精品久久丫| 亚洲高清日韩精品第一区| 亚洲邪恶天堂影院在线观看| 亚洲成AV人片一区二区| 国产亚洲真人做受在线观看| 亚洲日韩精品一区二区三区| 亚洲精品制服丝袜四区| 伊伊人成亚洲综合人网7777| 亚洲精品乱码久久久久久| 亚洲精品无码永久在线观看你懂的| 亚洲伊人久久成综合人影院| av在线亚洲欧洲日产一区二区|