hibernate mysql 视图查询_mysql – 数据库的Hibernate加密对应用程序完全透明

如果您在应用程序中完成工作,则可以使用Hibernate自定义类型,并且不会对代码添加许多更改.

这是我使用的加密字符串自定义类型:

import org.hibernate.usertype.UserType

import org.apache.log4j.Logger

import java.sql.PreparedStatement

import java.sql.ResultSet

import java.sql.SQLException

import java.sql.Types

class EncryptedString implements UserType {

// prefix category name with 'org.hibernate.type' to make logging of all types easier

private final Logger _log = Logger.getLogger('org.hibernate.type.com.yourcompany.EncryptedString')

Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws SQLException {

String value = rs.getString(names[0])

if (!value) {

_log.trace "returning null as column: $names[0]"

return null

}

_log.trace "returning '$value' as column: $names[0]"

return CryptoUtils.decrypt(value)

}

void nullSafeSet(PreparedStatement st, Object value, int index) throws SQLException {

if (value) {

String encrypted = CryptoUtils.encrypt(value.toString())

_log.trace "binding '$encrypted' to parameter: $index"

st.setString index, encrypted

}

else {

_log.trace "binding null to parameter: $index"

st.setNull(index, Types.VARCHAR)

}

}

Class returnedClass() { String }

int[] sqlTypes() { [Types.VARCHAR] as int[] }

Object assemble(Serializable cached, Object owner) { cached.toString() }

Object deepCopy(Object value) { value.toString() }

Serializable disassemble(Object value) { value.toString() }

boolean equals(Object x, Object y) { x == y }

int hashCode(Object x) { x.hashCode() }

boolean isMutable() { true }

Object replace(Object original, Object target, Object owner) { original }

}

基于此,为int,long等创建类似的类应该很简单.要使用它,请将类型添加到映射闭包:

class MyDomainClass {

String name

String otherField

static mapping = {

name type: EncryptedString

otherField type: EncryptedString

}

}

我省略了CryptoUtils.encrypt()和CryptoUtils.decrypt()方法,因为那不是特定于Grails的.我们正在使用AES,例如“Cipher cipher = Cipher.getInstance(‘AES / CBC / PKCS5Padding’)”.无论你最终使用什么,请确保它是双向加密,即不要使用SHA-256.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值