berg369 2020-07-01 14:18 采纳率: 85.7%
浏览 540
已采纳

当前用户大家怎么设计?是在Service层方法中作为参数传入,还是作为公共方法任何地方获取?

当前用户是系统中很特别的一个对象,其实就是会话跟踪,可以用session或者请求中带token,通常统一处理比如在过滤器中,得到当前用户对象放在request的属性中(或者线程变量中),然后

方式1:设计一个静态方法得到当前用户,controller和Service层代码均可访问; 方式2:Controller可以访问得到,service层代码则作为方法参数传入。
请问你们是怎么实现的?

方式2作为Service方法参数缺点是所用用到的方法都要加一个当前用户参数,优点是较为独立通用特别是RPC调用时,rpc调用时并不走过滤器等统一处理,rpc调用是直接访问Service层,所以避免与会话牵扯更好吧。

这里我比较纠结,获取当前用户在很多方法中都会用到,作为参数传递是否太繁琐?请指导,谢谢!

琢磨半天,决定用service方法参数,有数据权限控制的方法就要传入当前用户id,这样会话层只在Controller而不侵入service层,接口远程调用时比较简单,远程我们用dubbo或hessian,方法参数中有了,就不必用外部方法传递用户了(比如通过dubbo的filter或hessian的header传递附件的值)。
但是随后,我想到了一个安全问题。“当前用户”应由系统产生和维护的,不应像普通用户是随便调用的,在方法参数中就会面临调用者传入错误的用户id的问题?无论是查到了别人的数据还是把操作者置为了其他用户都是严重问题。算了吧,还是不要用参数方式了,就算是远程调用,也要通过filter或header传递token。

  • 写回答

4条回答 默认 最新

      报告相同问题?

      相关推荐 更多相似问题

      悬赏问题

      • ¥30 关于#c++#的问题:用C++编程实现主存-Cache地址映射(附运行成功截图+注释)
      • ¥25 接口/特征方法的异常错误返回如何判断是否需要设计
      • ¥40 代码+预测分析,文件私信发哦(价格可商量)
      • ¥15 GAMES101 HW1 无法定义
      • ¥15 pycharm不管允许什么代码都出错,都会出现下面的情况。
      • ¥15 boost::integrate的用法
      • ¥20 51单片机输出pwm时无法调节频率,如何解决?
      • ¥15 DSP28335 AD采集正弦波
      • ¥50 pwwinauto调式修改
      • ¥30 关于#单片机#的问题:单片机基于51单片机开发计时器,使其实现以下功能:(1)开发板上四个独立按键分别控制计时器的启停、计时器的复位(按下计时值归零)、计时位切换、计时时间的递增