如何将自己创建的对象注入Spring中?

FunGa 发布于 2018/05/02 15:10
阅读 974
收藏 1

背景说明

我的系统是一个Java Web服务,现在我想前后端进行分离,所有接口都API化,请求接口的参数必须加密。为了适应当前Spring MVC的开发风格,我通过使用AOP,在进入接口方法之前先对传入数据进行签名校验,如果验证通过,就会进入接口方法中。但是由于参数是加密传过来的,我在AOP切面方法中已经解码获取到了实际的参数,我需要将这个些参数set到HttpServletRequest对象中,但是我们知道,这当前是实现不了,所以我实现了一个类继承至HttpServletRequestWrapper来做这个事情。我自己创建HttpServletRequestWrapper对象,这个对象包含所有request的信息,以及我修正后的参数。如果能够做到将这个对象注入到Spring替换原来的HttpServletRequest对象,那么在Controller中我们什么都不做即可完成我的需求。

问题

现在的问题就是,我创建的对象,如何在代码中交给Spring容器管理,替换原来的HttpServletRequest对象呢?

 

不知道我说清楚没有,如有疑问,欢迎留言,我可以多说点,恳请大神不吝赐教!

 

加载中
0
漂泊的树叶
漂泊的树叶

1.  你需要一个Filter ,在执行doFilter的时候,  把你自己的request 放进去
2. 如果交给spring管理, 应该是用@Component在类上注解一下就可以了(Springboot是这样的)

FunGa
FunGa
可以使用Filter或者拦截器去做,我之前使用了拦截器去实现,但是呢,拦截器就不够灵活了。现在使用AOP方式实现,所有标记了我写的注解的方法作为切入点,这样如果去掉注解,可以作为普通的接口,加上注解就是需要认证的接口,非常的灵活。
0
follow
follow
用https不比加密参数更好吗
FunGa
FunGa
内部几百个系统都是使用统一的接口协议,HTTPS肯定是这样的,我说的这个是对调用接口的系统进行签名校验,开发的接口不是谁都能够调用的。
0
敏敏_特穆尔
敏敏_特穆尔

大神:你遇到的问题解决了吗?我也有类似的需求,想把自己创建出来的对象直接交给spring管理,但是查看了他的源码,感觉都是通过全类名反射创建对象。想重写下AbstractBeanFactory 但是看得还不太懂,希望指教。

0
wangyang_d
wangyang_d

创建 BeanDefinitionBuilder 然后 DefaultListableBeanFactory.registerBeanDefinition()

 

返回顶部
顶部