猿问

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

用户信息绑定会话,怎样才可以在服务层注入?

慕斯王
浏览 2940回答 7
7回答

红颜莎娜

如果不想在controller拿到用户信息传到service层,直接在service层也是可以拿到的。spring mvc在处理请求的时候,会把请求对象放到RequestContextHolder持有的ThreadLocal对象中,你可以去看看DispatcherServlet类的源代码。在service层可以按照如下代码获取://获取到当前线程绑定的请求对象 HttpServletRequest request = ((ServletRequestAttributes)RequestContextHolder.getRequestAttributes()).getRequest(); //已经拿到session,就可以拿到session中保存的用户信息了。         System.out.println(request.getSession().getAttribute("userInfo"));

函数式编程

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

慕虎7371278

HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder .getRequestAttributes()).getRequest(); ShiroUser user = null; if (req != null) { user = (ShiroUser) req.getSession().getAttribute("currentUser"); } 所以你想再service层获取的是request 对不对!!

猛跑小猪

SecurityContextHolder 可以处理登录用户的存取, UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); authentication.setDetails(new WebAuthenticationDetailsSource() .buildDetails(httpRequest)); SecurityContextHolder.getContext().setAuthentication(authentication); UsernamePasswordAuthenticationToken authentication = SecurityContextHolder.getContext().getAuthentication();

三国纷争

ThreadLocal?

阿波罗的战车

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

相关分类

Java
我要回答