无法通过sesssion获取登录用户信息时怎么办

思路

可知,同一个线程下的不同类可以共享TreadLocal这个线程局部变量,同时,在前端向后端发送的一个请求中,如果后端使用了多个类进行工作,那么这多个类都是在同一个线程中的,因此他们可以共享TreadLocal,于是便可以将登录用户信息存入TreadLocal,当无法获取session时便可以通过TreadLocal获取

步骤

1.编写一个利用TreadLocal存取信息的工具类

public class BaseContext {
    private static ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public static void setUserId(Long id){
        threadLocal.set(id);
    }
I
    public static String getUserId(){
        return threadLocal.get();
    }
}

2.在登录过滤器中利用session获取用户登录信息

String id = request.getSession().getAttribute("user");

3.利用工具类存用户登录信息

BaseContext.setUserId(id);

4.之后只要是在同一线程中便可以通过以下代码共享userId了

BaseContext.getUserId();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring 中,可以使用以下方法从 session获取登录信息: 1. 在控制器方法中,使用 @SessionAttribute 注解获取 session 中的属性值。例如: ``` @GetMapping("/user") public ModelAndView getUserProfile(@SessionAttribute("user") User user) { ModelAndView mav = new ModelAndView("user"); mav.addObject("user", user); return mav; } ``` 上述代码中,@SessionAttribute 注解指定了 session 中的属性名为 "user",并将其注入到方法参数的 User 对象中。 2. 在控制器方法中,使用 HttpServletRequest 对象获取 session,并从 session获取登录信息。例如: ``` @GetMapping("/user") public ModelAndView getUserProfile(HttpServletRequest request) { HttpSession session = request.getSession(); User user = (User) session.getAttribute("user"); ModelAndView mav = new ModelAndView("user"); mav.addObject("user", user); return mav; } ``` 上述代码中,通过 request.getSession() 方法获取 session 对象,然后使用 session.getAttribute() 方法获取属性名为 "user" 的属性值,并将其注入到 ModelAndView 对象中。 无论是哪种方法,都需要在用户登录成功后将用户信息存储到 session 中,例如: ``` @PostMapping("/login") public String login(@RequestParam("username") String username, @RequestParam("password") String password, HttpSession session) { User user = userService.login(username, password); if (user != null) { session.setAttribute("user", user); return "redirect:/user"; } else { return "login"; } } ``` 上述代码中,通过 userService.login() 方法验证用户信息,如果验证成功,则将用户信息存储到 session 中,并重定向到用户信息页面。如果验证失败,则返回登录页面。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值