java有可能在运行时改变变量类型吗

写下带不走的风 发布于 2015/06/10 17:31
阅读 989
收藏 0

有一个user对象

Public class User{
  private int id;
  private String name;
}



现在要把该对象中的id加密传到前台,请问有什么好的方法吗?因为目前系统加密的方式只能针对String类型。因为项目中多处用到了user且项目一期已完成,如果直接改int为String(在controller层改)的话会增加很多工作量。

目前想法:通过反射在运行时改变id类型为String,并且加密,不知道是否可行。


加载中
0
首席撸出血
首席撸出血
突然发现我们公司的架构还是很吊的,没有M只有VC,一个类可以塞所有的东西,int 塞进去,String取出来,娃哈哈
0
如比如比
如比如比
只是传的时候才加密么,那就再加一个string型的id,或者扩张个子类在子类里作呗。
0
写下带不走的风
写下带不走的风

引用来自“茶壶”的评论

只是传的时候才加密么,那就再加一个string型的id,或者扩张个子类在子类里作呗。
2种方案都想到了,但是实在是由于很多对象都涉及到了,改动量比较大。因此目前还没有动工,如果没有更好的办法只能用土方法了。
如比如比
如比如比
如果这样的id有很多,那就不是int型了,而是一个类型,这个类型能提供原始的int id和string型的加密id,由于保密,在向外传客户端时,可将原始的int id抹掉。
0
写下带不走的风
写下带不走的风

引用来自“茶壶”的评论

只是传的时候才加密么,那就再加一个string型的id,或者扩张个子类在子类里作呗。

引用来自“孙青彪”的评论

2种方案都想到了,但是实在是由于很多对象都涉及到了,改动量比较大。因此目前还没有动工,如果没有更好的办法只能用土方法了。
因为涉及之初没有考虑,现在扩展起来很麻烦,如果以前的Int无法复用,而是只能用里面的值,那我会考虑使用新建一个对象,这个对象和源对象一样,除了id类型不同。因为有的是bean对象,因此,增加字段的方式不会考虑。
0
R-Lu
R-Lu
其实应该写成对象Integer类型我觉得。
0
noday
noday
加密(String.valueOf(id))
0
G
GamePlayer

1.eclipse 搜索后可以一次性替换所有搜索内容

2.动态代理

0
j_ke
j_ke
如果是用的hibernate的话,在bean里面新增一个String类型的变量比如叫encodeId,前面加上@Transient注解 标注这是一个即时变量,不映射数据库表字段,然后生成相应的getter和setter方法,把id的值转成String类型赋给encodeId,加密传到前台处理就可以了...
0
写下带不走的风
写下带不走的风

引用来自“j_ke”的评论

如果是用的hibernate的话,在bean里面新增一个String类型的变量比如叫encodeId,前面加上@Transient注解 标注这是一个即时变量,不映射数据库表字段,然后生成相应的getter和setter方法,把id的值转成String类型赋给encodeId,加密传到前台处理就可以了...
目前只能用笨方法了,想法是写一个自定义注解,不过aspect不知道能不能在运行时用反射改变变量类型,貌似是不可以的,所以只能作废了。现在没有什么时间研究了,先用新的变量来做,新建一个String类型的id然后前台也需要做修改。
返回顶部
顶部