目的:身份證號在數據庫中以密文的形式存儲。
步驟流程:
- 在數據庫database中,爲表a_table添加name、mobile、idNo三個字段,便於直觀查詢數據。
alter table a_table add name varchar(24) NOT NULL DEFAULT '' COMMENT '姓名', add mobile varchar(16) NOT NULL DEFAULT '' COMMENT '手機號',add id_no varchar(24) NOT NULL DEFAULT '' COMMENT '身份證號'; |
- 在數據庫database中,爲表b_table添加idNo_des、idNo_asterisk。用來對身份證號進行密文存儲。
alter table b_table add id_no_des varchar(64) NOT NULL DEFAULT '' COMMENT '身份證號des加密', add id_no_asterisk varchar(24) NOT NULL DEFAULT '' COMMENT '身份證號掩碼'; |
- 修改實體類ATable.java、BTable.java,增加相應的字段。
- 修改ATableMapper.xml、BTableDetailMapper.xml文件,增加相應字段的增刪改查的類型處理方法。
typeHandler="com.handler.IdNoDesHandler" |
- 配置mybatis的TypeHandler.
<bean id="myBatisSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="shuffle-dataSource" /> <property name="mapperLocations" value="classpath*:mapper/*Mapper.xml" /> <!--typeHandler注入--> <property name="typeHandlersPackage" value=" com.handler.IdNoDesHandler " /> </bean> |
8、編寫IdDesHandler處理類
public class IdNoDesHandler extends BaseTypeHandler {
@Override public void setNonNullParameter(PreparedStatement ps, int i, Object parameter, JdbcType jdbcType) throws SQLException { ps.setString(i, DESUtils.encrypt((String)parameter)); } @Override public Object getNullableResult(ResultSet rs, String columnName) throws SQLException { String columnValue = rs.getString(columnName); return DESUtils.decrypt(columnValue); } @Override public Object getNullableResult(ResultSet rs, int columnIndex) throws SQLException { String columnValue = rs.getString(columnIndex); return DESUtils.decrypt(columnValue); } @Override public Object getNullableResult(CallableStatement cs, int columnIndex) throws SQLException { String columnValue = cs.getString(columnIndex); return DESUtils.decrypt(columnValue); } } |