Spring配置文件使用@Value注解注入值的方法,以及AOP切面在Spring+SpringMVC中的不生效解决

以后碰到新的坑都做个日志记录下来.希望能对自己有更大的提高!

今天做安全问题的时候,想要实现一个账户在一定时间内登陆N次就被锁定的功能,当然最好是可以做成一个可以配置次数以及解锁时间等信息的方式,然后直接用属性上加@Value的方法,发现出现了Could not resolve placeholder的异常.查了下是发现@Value需要在下面添加属性的get方法,而且属性必须只能用String类型接收.还有一种方法,也可以不使用get方法,在@Value里面添加上configBean的id值.就是下面的写法.

然后实现锁定的功能,这个当然要使用到切面了.准备在后置通知里面对Session做一个判断,如果有值就不做处理,没有值就在数据库中对此用户名的loginFailedTimes加一.然后使用环绕通知,在登陆操作前,判断此用户是否已经超出设定的次数,超出直接就不执行后面的方法,往前端抛出用户已被锁定的信息.

既然说到这了,就开始动手,直接动手

先拿到request中的username进行打印.小测一下.发现切面根本没生效.检查Spring的ApplicationContext配置文件,已经开启了aspectj自动代理.而且类上也注解了@Aspect,@Component.

查了下有说是要将<aop:aspectj-autoproxy />放入到SpringMVC的配置文件中,修改了下,发现开始出现类型错误:BeanNotOfRequiredTypeException: Bean named '****' is expected to be of type '****' but was actually of type 'com.sun.proxy.$Proxy.是重复进行代理的问题.所以改回去.挺懵的.最后是误打误撞.给SpringMVC的配置文件里面也加了一个切面自动代理才成功使切面生效.估计 又是和以前扫包出现事务无法回滚类似的问题.明天继续做.冲鸭~~~

总结下:有必要抽空的时候好好了解下Spring父子容器之间的关系.

猜你喜欢

转载自blog.csdn.net/hexiaodiao/article/details/84145530