intercepter

UserLoginInterceptor

这段代码定义了一个名为 `UserLoginInterceptor` 的拦截器,用于拦截用户登录请求,在用户登录时进行身份验证和用户信息存储。接下来我会逐一解释代码中使用到的各个部分:

1. `package com.cqupt.software_1.intercepter;`:声明了拦截器所在的包路径。

2. 导入了必要的类和注解,包括 Spring 相关的注解和接口。

3. `@Component`、`public class UserLoginInterceptor implements HandlerInterceptor` 类:标记这是一个 Spring 组件,并实现了 Spring MVC 的 `HandlerInterceptor` 接口,用于进行请求拦截和处理。

4. `@Autowired UserService userService;`:自动注入了 `UserService` 接口,用于处理用户相关的逻辑。

5. `preHandle` 方法:在请求处理前执行的方法,用于对用户登录状态进行验证。首先尝试从请求中获取用户ID,然后根据用户ID查询用户信息,并使用 `UserThreadLocal` 类存储用户信息在当前线程中。如果用户已登录,则返回 `true`,否则返回 `false`。

6. `afterCompletion` 方法:在请求处理完成后执行的方法,用于清除当前线程中存储的用户信息,确保不会出现线程安全问题。

通过这个拦截器,可以实现对用户登录状态的拦截和处理,确保用户在进行相关操作时已登录且可以获取到相应的用户信息。这对于系统安全性和用户身份识别非常重要。
package com.cqupt.software_1.intercepter;

import com.cqupt.software_1.common.UserThreadLocal;
import com.cqupt.software_1.entity.User;
import com.cqupt.software_1.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@Component
public class UserLoginInterceptor implements HandlerInterceptor {
    @Autowired
    UserService userService;
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
//        for (Cookie cookie : request.getCookies()) {
//            if(cookie.getName().equals("userId")){
//                // 已经登陆
//                User user = userService.getUserById(Integer.parseInt(cookie.getValue()));
//                UserThreadLocal.put(user);
//                return true;
//            }
//        }
        Integer userId = (Integer)request.getSession().getAttribute("userId");
        if(userId!=null){
            User user = userService.getUserById(userId);
            UserThreadLocal.put(user);
            return true;
        }
        System.out.println("没有携带cookie");
        return false;
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        UserThreadLocal.remove();
    }
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值