为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Spring容器 service层获取当前登录用户信息?

如何在 Spring容器 service层获取当前登录用户信息?

慕斯王 2019-03-01 10:29:17
用户信息绑定会话,怎样才可以在服务层注入?
查看完整描述

7 回答

?
红颜莎娜

TA贡献1842条经验 获得超12个赞

如果不想在controller拿到用户信息传到service层,直接在service层也是可以拿到的。
spring mvc在处理请求的时候,会把请求对象放到RequestContextHolder持有的ThreadLocal对象中,你可以去看看DispatcherServlet类的源代码。
在service层可以按照如下代码获取:

//获取到当前线程绑定的请求对象
HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest();
//已经拿到session,就可以拿到session中保存的用户信息了。
        System.out.println(request.getSession().getAttribute("userInfo"));
查看完整回答
反对 回复 2019-03-01
?
函数式编程

TA贡献1807条经验 获得超9个赞

设计不合理,用户信息应该在Controller层获取,然后传入Service层使用。

查看完整回答
反对 回复 2019-03-01
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

        HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder
                .getRequestAttributes()).getRequest();
        ShiroUser user = null;
        if (req != null) {
            user = (ShiroUser) req.getSession().getAttribute("currentUser");
        }

所以你想再service层获取的是request 对不对!!

查看完整回答
反对 回复 2019-03-01
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

SecurityContextHolder 可以处理登录用户的存取,

UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken(
        userDetails, null, userDetails.getAuthorities());
authentication.setDetails(new WebAuthenticationDetailsSource()
        .buildDetails(httpRequest));
SecurityContextHolder.getContext().setAuthentication(authentication);
UsernamePasswordAuthenticationToken authentication = SecurityContextHolder.getContext().getAuthentication();
查看完整回答
反对 回复 2019-03-01
?
三国纷争

TA贡献1804条经验 获得超7个赞

ThreadLocal?

查看完整回答
反对 回复 2019-03-01
?
阿波罗的战车

TA贡献1862条经验 获得超6个赞

比较简单方法就是页面直接将用户信息传入servlet然后显示到页面上
ActionContext.getContext().put("name", name);
${username }

查看完整回答
反对 回复 2019-03-01
  • 7 回答
  • 0 关注
  • 2939 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信