拦截器获取请求头里面的信息

Springboot获取请求头里面的Token

获取请求头的信息

你好! 这是你第一次使用 **Markdown编辑器** 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。

使用拦截器来获取请求头的信息

创建MyInterceptor类来获取信息

/***
 * 拦截器拦截
 */

@Component
public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //获取请求头里面的值
        boolean flag = true;
        String token = request.getHeader("Authorization");
        if (StringUtils.isEmpty(token)) {
            flag = false;
        }

        //替换bearer
        String newtoken = token.replace("Bearer ", "");
        System.out.println(newtoken);

        try {
            //判断是否合法
            if (StringUtils.isEmpty(JwtUtil.verify(newtoken))) {
                return true;
            }
        } catch (Exception e) {

            return false;
        }

        return flag;

    }

}

WebMvcConfig类 注册拦截器

/**
 * 注册拦截器
 * */
@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
    @Autowired
    MyInterceptor myinterceptor;


    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myinterceptor).addPathPatterns("/flow/task/**");

    }

}

Jwt工具类来判断是否合法等


/**
 * @Auther 罗涛
 * @Date 2023/3/28
 * 落尽红樱君不见,轻绘梨花泪沾衣
 */
@Component
public class JwtUtil {
    @Resource
    private Cache<Object> cache;

    /**
     * 构建token
     *
     * @param username 主体
     * @param claim    私有声明
     * @param userEnums 用户枚举
     * @return TOKEN
     */
    public String createToken(String username, Object claim, UserEnums userEnums) {
        //访问token
        String accessToken = createToken(username, claim,1440L);
//        String accessToken = createToken(username, claim,1L);

//        cache.put(CachePrefix.TOKEN.getPrefix(userEnums) + accessToken, 1,1200L
//                , TimeUnit.MINUTES);
        return accessToken;
    }

    /**
     * 校验token
     */
    public boolean verify(String token){
        try {
            Jwts.parserBuilder().setSigningKey(KeyUtils.generalKeyByDecoders()).build().parseClaimsJws(token);
            return true;
        }catch (Exception e){
            return false;
        }
    }


    /**
     * 生成token
     *
     * @param username       主体
     * @param claim          私有神明内容
     * @param expirationTime 过期时间(分钟)
     * @return token字符串
     */
    private String createToken(String username, Object claim, Long expirationTime) {
        //JWT 生成
        return Jwts.builder()
                //jwt 私有声明
                .claim(SecurityEnum.USER_CONTEXT.getValue(), JSONUtil.toJsonStr(claim))
                //JWT的主体
                .setSubject(username)
                //失效时间 当前时间+过期分钟
                .setExpiration(new Date(System.currentTimeMillis() + expirationTime * 60 * 1000))
                //签名算法和密钥
                .signWith(KeyUtils.generalKeyByDecoders())
                .compact();
    }

    /**
     * 根据request获取用户信息
     *
     * @return 授权用户
     */
    public static UserInfo getCurrentUser() {
        if (RequestContextHolder.getRequestAttributes() != null) {
            HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
            String accessToken = request.getHeader(SecurityEnum.HEADER_TOKEN.getValue());
            return getAuthUser(accessToken);
        }
        return null;
    }

    /**
     * 根据jwt获取token重的用户信息
     *
     * @param accessToken token
     * @return 授权用户
     */
    public static UserInfo getAuthUser(String accessToken) {
        try {
            //获取token的信息
            Claims claims = Jwts.parserBuilder().setSigningKey(KeyUtils.generalKeyByDecoders()).build().parseClaimsJws(accessToken).getBody();
//            Claims claims
//                    = Jwts.parser()
//                    .setSigningKey(KeyUtils.generalKeyByDecoders())
//                    .parseClaimsJws(accessToken).getBody();
            //获取存储在claims中的用户信息
            String json = claims.get(SecurityEnum.USER_CONTEXT.getValue()).toString();
            return JSONUtil.toBean(json,UserInfo.class);
        } catch (Exception e) {
            return null;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值