springboot filter 和 interceptor 使用

发布时间 2023-04-12 17:30:27作者: 冬马党

userholder

public class UserHolder {
    private static ThreadLocal<String> userThreadLocal = new ThreadLocal<>();

    //为当前的线程变量赋值上用户信息
    public static void setLoginUser(String user) {
        userThreadLocal.set(user);
    }
    //从当前线程变量中获取用户信息
    public static String getLoginUser() {
        return userThreadLocal.get();
    }


    public static void removeUser() {
        userThreadLocal.remove();
    }

}

filter

import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@Component
public class TokenAuthenticationFilter extends OncePerRequestFilter {

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        String header = request.getHeader("token");
        if(header != null){
//            UserHolder.setLoginUser("xiaosu");
        }
        UserHolder.setLoginUser("xiaoai");
        filterChain.doFilter(request,response);
    }

}

 

interceptor

import org.springframework.web.servlet.HandlerInterceptor;

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

public class UserInterpector implements HandlerInterceptor {


    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String header = request.getHeader("token");
        if(header != null){
//            UserHolder.setLoginUser("xiaosu");
        }
        UserHolder.setLoginUser("inter ---xiaoai");
        return true;
    }

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