妙用idea的断点,完成本地化配置

小明是一名搬砖人员,他正在开发一个需要用户权限的接口,有一个拦截器(AuthInterceptor)去控制用户登录状态,小明每次清除cookie后去调用方法都需要重新登录,觉得非常的麻烦。如果你去重写这个AuthInterceptor成MockAuthInterceptor如下代码:

妙用idea的断点,完成本地化配置

并且修改AuthInterceptor的注入方式

妙用idea的断点,完成本地化配置

就可以做到本地用户不需要登录就能完成用户注入了。

但是小明发现他的搬砖队友得用他自己的用户信息,此时他本地就要修改用户的信息,但是他提交代码的时候不小心提交上去了,导致小明用的时候数据一直不对,排查了很久。当然聪明的小伙伴能想到这么一种做法,使用springboot的启动参数,去调整本地配置

此时MockAuthInterceptor被修改成了下面的样子

妙用idea的断点,完成本地化配置

并且设置spring启动项

妙用idea的断点,完成本地化配置

每个搬砖工都这么操作后,就可以完成每次应用的请求用户都是自己。

以上确实能解决上面的问题了,如果除开Mock的拦截器外可以说开发者完全可以避开代码提交时候恢复代码的麻烦和接口登陆的问题,但是你可能是一个标准的web项目,没有boot,这咋整啊,楼主就是这么一个情况,下面说一个巧妙的方法去规避上面的情况,那就是使用断点。

 

众所周知断点是调试器让程序可以在某个代码的地方停顿,idea在断点的情况下允许使用表达式进行及时代码运行。比如,刚刚的AuthInterceptor就可以这么操作,点打个断点在user判断的地方,如下

妙用idea的断点,完成本地化配置

此时可以右键选择表达式

妙用idea的断点,完成本地化配置

点击这里成多行表达式

妙用idea的断点,完成本地化配置

输入下面内容并且执行

妙用idea的断点,完成本地化配置

此时能发现user已经有数据了,断点执行后是可以到达controller而不是返回。我们可以发现,这个表达式是可以动态的修改我们的数据的。平时debug的时候也经常用这种方式进行调试代码变成自己想要的情况。

 

 

 

但是我们发现个问题,如果每次请求都要自己执行以下这个代码,是不是非常的麻烦?

接下来我们来介绍一个新的断点---条件断点。

我们右键刚刚打的断点发现

妙用idea的断点,完成本地化配置

这里有个条件可以输入,这个条件表达式的结果必须是boolean类型(不然怎么叫条件),我常用这个断点去断一些情况很多但只有某种情况下的代码。比如你调试循环的时候

妙用idea的断点,完成本地化配置

上面是spring初始化单例bean的处理方法,这时有一堆的bean会被创建,但是我想看看我的UserService是怎么创建的则可以右键断点写上表达式

妙用idea的断点,完成本地化配置

此时断在这里的肯定是bean名字为UserService,应该就是我的那个bean了,后面跟就完事了。

 

上面是条件断点的运用,我们发现其实它会类似于表达式一样运行并且判断断点的结果去断程序,聪明的小伙伴应该已经有一点想法了。

那我来说说怎么实现我一开始说的小明那个希望每次不用登录而且不用担心开发者提交了自己的信息吧。

右键刚刚AuthInterceptor的断点

写入下面内容

妙用idea的断点,完成本地化配置

记得打开多行输入,此时就是他会自动执行用户注入,无任何代码侵入了解决方案了,但是要注意要开启断点,关闭断点是不会走任何表达式的。

这个方案除了不能类似于git那样的共享外都非常的使用!