用户信息绑定会话,怎样才可以在服务层注入?
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"));
慕虎7371278
TA贡献1802条经验 获得超4个赞
HttpServletRequest req = ((ServletRequestAttributes) RequestContextHolder
.getRequestAttributes()).getRequest();
ShiroUser user = null;
if (req != null) {
user = (ShiroUser) req.getSession().getAttribute("currentUser");
}
所以你想再service层获取的是request 对不对!!
猛跑小猪
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();
阿波罗的战车
TA贡献1862条经验 获得超6个赞
比较简单方法就是页面直接将用户信息传入servlet然后显示到页面上
ActionContext.getContext().put("name", name);
${username }
添加回答
举报
0/150
提交
取消