springboot 拦截器HandlerInterceptor使用

在项目中,登录信息token解析以及请求头信息等一系列操作,可以通过HandlerInterceptor预处理。
/**

  • Created with IntelliJ IDEA.

  • Copyright@ Apache Open Source Organization

  • @Auther: wanghaigen

  • @Date: 2021/04/26/18:40

  • @Description:
    */
    @Component
    public class ParamInterceptor implements HandlerInterceptor {

    /**

    • 请求开始 拦截对应的用户信息 存储到ThreadLocal
    • @param request
    • @param response
    • @param handler
    • @return
    • @throws Exception
      */
      @Override
      public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      // 1、获取 用户登录信息 并处理
      String userId = request.getHeader(Headers.AUTHORIZATION_USER_ID);
      if (StringUtils.isNotBlank(userId)) {
      UserUtils.setUserId(Long.parseLong(userId));
      String tenantId = request.getHeader(Headers.PARENT_TENANT_ID);
      if (StringUtils.isNotBlank(tenantId)) {
      UserUtils.setTenantId(Long.parseLong(tenantId));
      }
      String parentTenantId = request.getHeader(Headers.TENANT_ID);
      if (StringUtils.isNotBlank(parentTenantId)) {
      UserUtils.setParentTenantId(Long.parseLong(parentTenantId));
      }
      UserUtils.setUsername(request.getHeader(Headers.USER_NAME));
      UserUtils.setRealName(request.getHeader(Headers.USER_REALNAME));
      }
      return true;
      }

    /**

    • 请求结束 清除 ThreadLocal 信息
    • @param request
    • @param response
    • @param handler
    • @param ex
    • @throws Exception
      */
      @Override
      public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      UserUtils.remove();
      }
      }

实现拦截器代码:
备注:springboot2 WebMvcConfigurationSupport

@Configuration
public class InterceptorConfig extends WebMvcConfigurationSupport {

@Override
protected void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new ParamInterceptor()).addPathPatterns("/**");
    super.addInterceptors(registry);
}

}

UserUtils工具 通过ThreadLocal存储信息
代码如下:
public class UserUtils {

private static final ThreadLocal<UserResponse> TOKEN_THREAD_LOCAL = ThreadLocal.withInitial(() -> new UserResponse());

/**
 * 获取 userId
 *
 * @return
 */
public static Long getUserId() {
    return TOKEN_THREAD_LOCAL.get().getUserId();
}

/**
 * 设置 userId
 *
 * @param userId
 */
public static void setUserId(Long userId) {
    TOKEN_THREAD_LOCAL.get().setUserId(userId);
}

/**
 * 获取商户id
 *
 * @return
 */
public static Long getTenantId() {
    return TOKEN_THREAD_LOCAL.get().getTenantId();
}

/**
 * 设置商户 id
 *
 * @param tenantId
 */
public static void setTenantId(Long tenantId) {
    TOKEN_THREAD_LOCAL.get().setTenantId(tenantId);
}

/**
 * 设置 appId
 *
 * @param appId
 */
public static void setAppID(Long appId) {
    TOKEN_THREAD_LOCAL.get().setAppId(appId);
}

/**
 * 获取 appId
 *
 * @return
 */
public static Long getAppId() {
    return TOKEN_THREAD_LOCAL.get().getAppId();
}


public static String getUsername() {
    return TOKEN_THREAD_LOCAL.get().getUsername();
}

public static void setUsername(String username) {
    TOKEN_THREAD_LOCAL.get().setUsername(username);
}

public static String getRealName() {
    return TOKEN_THREAD_LOCAL.get().getRealName();
}

public static void setRealName(String realName) {
    TOKEN_THREAD_LOCAL.get().setRealName(realName);
}

/**
 * 移除
 */
public static void remove() {
    TOKEN_THREAD_LOCAL.remove();
}


public static String getUserIdAsStringValue () {
    return getUserId() + "";
}

public static String getTenantIdAsStringValue () {
    return getTenantId() + "";
}



/**
 * 获取父商户id
 *
 * @return
 */
public static Long getParentTenantId() {
    return TOKEN_THREAD_LOCAL.get().getParentTenantId();
}

/**
 * 设置父商户 id
 *
 * @param parentTenantId
 */
public static void setParentTenantId(Long parentTenantId) {
    TOKEN_THREAD_LOCAL.get().setParentTenantId(parentTenantId);
}

public static String getParentTenantIdAsStringValue () {
    return getParentTenantId() + "";
}

}

@Data
@Accessors(chain = true)
public class UserResponse {

/**
 * 用户 id
 */
private Long userId;

/**
 * 用户名
 */
private String username;

/**
 * 手机号
 */
private String realName;

/**
 * 商户 id
 */
private Long tenantId;

/**
 * 父商户 id
 */
private Long parentTenantId;

/**
 * app id
 */
private Long appId;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个倒霉催的程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值