一、            涉及对象

1.     RequestValuecom.gdxsoft.easyweb.script.RequestValue

RequestValue是系统中获取参数使用的对象,它将FromCookieSessionQuery,数据集(DTTable)等对象传递的参数作为一个对象统一处理。从而简便编程环境。

RequestValue基本使用是getString(参数名),例如getString(‘xmlname’)是获取配置文件名称。getRequest()是获取页面的request对象。

2.     DataConnectioncom.gdxsoft.easyweb.datasource.DataConnection

DataConnection是数据库连接,用于系统和数据库的操作,调用WEB容器的数据库连接池。使用方法:

生成对象

DataConnection conn=new DataConnection();

conn.setConfigName(‘test’); //EwaConnection.xml中定义的名称

获取结果集

//设置参数集合对象

conn.setRequestValue(requestValue);

//执行带参数查询命令

conn.executeQuery(select * from users where uid=@uid)

ResultSet rs=null; //结果集

if(conn.getErrorMsg()==null || conn.getErrorMsg().length==0){

        rs=conn.getLastResult().getResultSet(); //获取结果集

        ….

}

conn.close(); //关闭连接

3.     Logcom.gdxsoft.easyweb.log.Log

Log是记录日志的信息类,包括执行的配置文件(xmlname),配置项(itemname),调用的活动(Action),日期,IP,执行时间,日志描述信息等,在编写自定义类中调用。

二、            权限说明

页面权限可根据需要自行编写权限控制类,控制类需要根据IAcl接口派生(com.gdxsoft.easyweb.acl.IAcl)。

1.     接口说明:

函数

说明

参数

返回值

备注

canRun

是否可继续执行

 

true/false

如果true则继续执行,否则跳转到指定的页面

getGotoUrl

获取跳转页面

 

String

canRunfalse时调用

setGotoUrl

赋值跳转页面

 

 

好像用处不大。

getRequestValue

获取参数值对象

 

RequestValue

用于内部调用判断用

2.     编程说明

用户在编写自定义Acl时,主要编写canRun方法。基本思路是根据传递的参数来判别该模块是否当前用户可执行。如果不可执行,设置getGotoUrl获取的地址供系统调用。

 

使用方式是在配置项的Page参数表中设置Acl参数,填写你自定义的类的全称,例如:“your.pakagename.MyAcl”,系统会自动调用并执行。

 

举例说明,要点是注意两点,首先是判断是否允许执行,可从数据库,session或其他资源获取相应数据,其次根据参数设定不同的跳转地址。

package your.pakagename;

import com.gdxsoft.easyweb.script.RequestValue;

import com.gdxsoft.easyweb.acl.IAcl;

import com.gdxsoft.easyweb.datasource.DataConnection;

import com.gdxsoft.easyweb.datasource.Data.DTTable;

 

public class MyAcl implements IAcl {

    private String _XmlName;

    private String _ItemName;

    private RequestValue _RequestValue;

    private String _GoToUrl; //验证失败跳转页面

   

public boolean canRun() {

        //session中保存了管理员编号 ADM_ID

        //在表USER_ACL保存了权限数据,字段ALLOW表示是否可执行

        String sql = ”SELECT ALLOW FROM USER_ACL WHERE ”

            + ” USER_ID=@ADM_ID AND ITEM_NAME=@ITEMNAME ”

            + ” AND XML_NAME=@XMLNAME”;

       

DataConnection conn=new DataConnection();

        cnn.setConfigName(‘test’);

        //设置参数集合对象

conn.setRequestValue(this._RequestValue);

//执行带参数查询命令

conn.executeQuery(sql)

ResultSet rs=null; //结果集

boolean isCanRun=false; //返回值

if(conn.getErrorMsg()==null || conn.getErrorMsg().length==0){

    rs = conn.getLastResult().getResultSet(); //获取结果集

    //使用DTTable获取rs数据集

DTTable table = new DTTable();

    table.initData(table);

    if(table.isOk() && table.getCount()>0){

        //获取指定字段的值

        Object o = table.getRow(0).getCell(“ALLOW”).getValue();

        if(o!=null && o.toString().equals(“YES”)){

            isCanRun=true;

}

}

}

conn.close(); //关闭连接

        if(!isCanRun){

            //指向相应地址

            String xn=._RequestValue.getString(‘XMLNAME’).toLower();

            //根据XmlName判断,设置跳转地址

            if(xn.indexOf(“|admin.xml”)>){

        this._ GoToUrl=”/messages/errors/deny.html”;

    }else{

        this._ GoToUrl=”/messages/errors/user_deny.html”;

    }

}

return isCanRun;

    }

 

//赋值参数对象,类里要有对象接收

public void setRequestValue(RequestValue requestValue) {

        this._RequestValue = requestValue;

    }

    //获取跳转地址,注意要赋值 _GoToUrl

    public String getGoToUrl() {

        return _GoToUrl;

    }

   

    public RequestValue getRequestValue() {

        return _RequestValue;

    }

    public MyAcl() {

    }

    public MyAcl(String xmlName, String itemName) {

        this._ItemName = itemName;

        this._XmlName = xmlName;

    }

    public String getXmlName() {

        return _XmlName;

    }

    public void setXmlName(String xmlName) {

        _XmlName = xmlName;

    }

    public String getItemName() {

        return _ItemName;

    }

    public void setItemName(String itemName) {

        _ItemName = itemName;

    }

   

    public void setGoToUrl(String goToUrl) {

        _GoToUrl = goToUrl;

    }

}

三、            日志说明

日志可根据需要自行编写日志记录类,控制类需要根据ILog接口派生(com.gdxsoft.easyweb.log.ILog)。

1.     接口说明:

函数

说明

参数

返回值

备注

write

写日志

 

 

主要编写部分

setLog

赋值日志

log 日志信息

 

 

getLog

获取日志

 

String

 

2.     编程说明

用户在编写自定义Log时,主要编写write方法,作用是记录日志信息,无论是填写到数据库还是到文件用户需要自行编写。

 

使用方式是在配置项的Page参数表中设置Log参数,填写你自定义的类的全称,例如:“your.pakagename.MyLog”,同时,要在Action参数表中的CallSet部分填写记录日志的信息,例如“用户@username调用@xmlname@ItemName”,系统会自动调用并执行。

 

举例说明。

package your.pakagename;

import com.gdxsoft.easyweb.datasource.DataConnection;

import com.gdxsoft.easyweb.script.RequestValue;

 

public class MyLog  implements ILog {

private Log _Log;

    public void Write() {

        if (super.getLog().getMsg() == null) {

            return;

        }

/*

System.out.println(super.getLog().getXmlName() + ", "

                + super.getLog().getItemName() + ", " + super.getLog().getMsg()

                + ", " + super.getLog().getRunTime() + ", "

                + super.getLog().getDate());

*/

        this.WriteToLog();

    }

 

    /**

     * 参考定义自己的写入日志的方法, 下面的例子是个参考,是用于写入数据库的日志

     *

     * CREATE TABLE LOG_MAIN( LOG_ID INT IDENTITY, USER_ID INT, LOG_MSG

     * NVARCHAR(1000), LOG_TIME DATETIME, LOG_IP VARCHAR(19), LOG_XMLNAME

     * VARCHAR(200), LOG_ITEMNAME VARCHAR(244), LOG_RUNTIME INT, LOG_ACTION

     * VARCHAR(233), LOG_URL varchar(1500), LOG_REFERER varchar(1500), LOG_DES

     * nvarchar(200) )

     */

    private void WriteToLog() {

        // 根据自己的日志表结构生成写入日志的方法

        Log log = super.getLog();

        String sql = "INSERT INTO LOG_MAIN(LOG_DES, LOG_MSG, LOG_TIME,"

                + " LOG_IP, LOG_XMLNAME, LOG_ITEMNAME, LOG_RUNTIME"

                + ", LOG_ACTION, LOG_URL, LOG_REFERER)"

                + " VALUES (@LOG_DES, @LOG_MSG, @LOG_TIME,"

                + " @LOG_IP, @LOG_XMLNAME, @LOG_ITEMNAME, @LOG_RUNTIME, "

                + "@LOG_ACTION,  @LOG_URL, @LOG_REFERER)";

        RequestValue rv = new RequestValue();

        rv.addValue("LOG_DES", log.getDescription());

        rv.addValue("LOG_MSG", log.getMsg());

        rv.addValue("LOG_TIME", log.getDate(), "Date", 100);

        rv.addValue("LOG_IP", log.getIp());

        rv.addValue("LOG_XMLNAME", log.getXmlName());

        rv.addValue("LOG_ITEMNAME", log.getItemName());

        rv.addValue("LOG_RUNTIME", log.getRunTime());

        rv.addValue("LOG_ACTION", log.getActionName());

        rv.addValue("LOG_URL", log.getUrl());

        rv.addValue("LOG_REFERER", log.getRefererUrl());

 

        DataConnection cnn = new DataConnection();

        cnn.setConfigName(‘test’)

        try {

            // 设在日志的 RequestValue

            cnn.setRequestValue(rv);

            cnn.executeUpdate(sql);

        } catch (Exception e) {

            System.err.println(e);

        } finally {

            cnn.close();

        }

    }

    public Log getLog() {

        return _Log;

    }

    public void setLog(Log log) {

        _Log = log;

    }

}