快速业务通道

Java EE应用中对前端用户的数据库操作的审计 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-23
ction。编程模型如下:

清单 4. 使用 WSConnection 传递用户标识

import com.ibm.websphere.rsadapter.WSConnection; … InitialContext ctx = new InitialContext(); DataSource ds = (javax.sql.DataSource) ctx.lookup("jbdc/mydatasource") ; conn = ds.getConnection(); WSConnection wsconn = (WSConnection) conn ; Properties props = new Properties(); props.setProperty(WSConnection.CLIENT_ID, clientId); wsconn.setClientInformation(props); //do something on the wsconn  wsconn.setClientInformation(null); // 清除连接上的用户信息 

WSConnection 支持下列属性的传递:

WSConnection.CLIENT_ACCOUNTING_INFO

WSConnection.CLIENT_LOCATION

WSConnection.CLIENT_ID

WSConnection.CLIENT_APPLICATION_NAME

WSConnection.CLIENT_OTHER_INFO

WSConnection.OTHER_CLIENT_TYPE

和开源项目的结合

在实际大型项目中,直接通过 JDBC API 访问数据库比较少见,大多通过 O/R mapping 框架如 iBatis 或 Hibernate 去操纵数据库。这些框架往往对数据库连接进行了封装,同时客户的框架又经常进行了二次封装,这使得在连接上传递属性变得不太容易。下面针对 iBatis 和 Hibernate 提出了自己的一些实践解法。

下面都是针对 JDBC 4.0 之前的 JDBC driver 的编程实践。

在 iBatis 中传递连接属性

iBatis 提供了一个接口 com.ibatis.sqlmap.client.SqlMapClient,这个接口包含了数据库增删改查的常用方法。很多客户都是基于该接口的一个 wrapper 类去完成数据库操作。但 SqlMapClient 默认的方法封装掉了对连接的使用,即开发者无须获得连接和释放连接即可使用。

客户常用的 SqlMapClient 包装类的形式:

清单 5. 一个典型的 SqlMapClient 封装类

public class SqlMapClientUtil {    private SqlMapClient sqlMap ;    public SqlMapClientUtil(SqlMapClient sqlMap) {      this.sqlMap = sqlMap ;    }    public SqlMapClient getSqlMap() {      return sqlMap ;    }    … }

Java EE应用中对前端用户的数据库操作的审计(4)

时间:2010-11-03 IBM 库俊国

客户使用这种包装类的好处是减轻调用方对 SqlMapClient 的初始化工作,同时也可以对 SqlMapClient 做一些增强。但如果需要在连接上传递属性,需要进行一些改造。改造办法是写一个自己的 SqlMapClient 实现,逐一实现 SqlMapClient 里的方法。

清单 6. 一个自定制的 SqlMapClient 实现

public class MySqlMapClient implements SqlMapClient{    SqlMapClient sqlMap ;    public MySqlMapClient(SqlMapClient sqlMap) {      this.sqlMap = sqlMap ;    }    public Object insert(String id, Object parameterObject) throws SQLException {      Object retObj = null ;      OracleDataSource dataSource = null ;      OracleConnection conn = null ;      try {        conn = (OracleConnection)dataSource.getConnection();        SqlMapSession session = sqlMap.openSession(conn);        conn.setClientIdentifier("") ;        sqlMap.setUserConnection(conn) ;        retObj = session.insert(id, parameterObject) ;        conn.clearClientIdentifier("") ;        conn.commit() ;      } catch (Exception e) {        // TODO: handle exception     

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号