一、涉及对象
- RequestValue(com.gdxsoft.easyweb.script.RequestValue)
RequestValue是系统中获取参数使用的对象,它将From,Cookie,Session,Query,数据集(DTTable)等对象传递的参数作为一个对象统一处理。从而简便编程环境。
RequestValue基本使用是getString(参数名),例如getString(‘xmlname’)是获取配置文件名称。getRequest()是获取页面的request对象。
- DataConnection(com.gdxsoft.easyweb.datasource.DataConnection)
DataConnection是数据库连接,用于系统和数据库的操作,调用WEB容器的数据库连接池。使用方法:
生成对象
DataConnection conn=new DataConnection();
conn.setConfigName(‘test’);
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();
- Log(com.gdxsoft.easyweb.log.Log)
Log是记录日志的信息类,包括执行的配置文件(xmlname),配置项(itemname),调用的活动(Action),日期,IP,执行时间,日志描述信息等,在编写自定义类中调用。
二、权限说明
页面权限可根据需要自行编写权限控制类,控制类需要根据IAcl接口派生(com.gdxsoft.easyweb.acl.IAcl)。
- 接口说明:
函数 |
说明 |
参数 |
返回值 |
备注 |
canRun |
是否可继续执行 |
|
true/false |
如果true则继续执行,否则跳转到指定的页面 |
getGotoUrl |
获取跳转页面 |
|
String |
canRun为false时调用 |
setGotoUrl |
赋值跳转页面 |
|
|
好像用处不大。 |
getRequestValue |
获取参数值对象 |
|
RequestValue |
用于内部调用判断用 |
- 编程说明
用户在编写自定义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() {
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 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=this._RequestValue.getString(‘XMLNAME’).toLower();
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;
}
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)。
- 接口说明:
函数 |
说明 |
参数 |
返回值 |
备注 |
write |
写日志 |
|
|
主要编写部分 |
setLog |
赋值日志 |
log |
|
日志信息 |
getLog |
获取日志 |
|
String |
|
- 编程说明
用户在编写自定义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;
}
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 {
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;
}
}