用户信息创建token 放进redis

本文介绍了一种移动端登录管理的实现方式,包括Token的生成、存储和验证过程。通过使用Spring Boot、Redis和自定义Token生成器,实现了高效且安全的用户认证流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package cn.com.do1.component.gaiaportal.util;

import cn.com.do1.component.dsfcommon.exception.RestException;
import cn.com.do1.component.dsfredis.RedisKeys;
import cn.com.do1.component.gaiaauthorization.common.utils.TokenGenerator;
import cn.com.do1.component.gaiaauthorization.model.entity.DsfRoleEntity;
import cn.com.do1.component.gaiaauthorization.model.entity.DsfUserEntity;
import cn.com.do1.component.gaiaauthorization.model.form.AllPermissForm;
import cn.com.do1.component.gaiaportal.model.vo.login.UserInfoVo;
import com.google.gson.Gson;
import lombok.extern.slf4j.Slf4j;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;


/**
 * 移动端登录管理
 *
 * @author Mark
 */
@Slf4j
@Component
public class YddUserTokenUtils {


    private static final int SUPER_ADMIN_TYPE  = 1;

    /**
     * 过期时间(单位:秒)
     */
    @Value("${do1.cloud.ydd.token.expire:7200}")
    public long expire;

    @Autowired
    StringRedisTemplate redisTemplate;



    /**
     * 创建请求Token
     * 临时token
     * @return
     */
    public String createRequestToken(UserInfoVo userInfoVo){
        String token = TokenGenerator.generateValue();
        userInfoVo.setToken(token);
        AllPermissForm tempUserForm = new AllPermissForm();
        tempUserForm.setUserid(0L);
        tempUserForm.setUsername("TempUser");
        tempUserForm.setDeptid(0L);
        tempUserForm.setPersonname("系统临时用户");
        DsfRoleEntity role = new DsfRoleEntity();
        role.setType(SUPER_ADMIN_TYPE);
        // 构造临时用户
        DsfUserEntity temporaryUser = new DsfUserEntity();
        temporaryUser.setUserId(0L);
        temporaryUser.setStatus("1");
        temporaryUser.setUserName("TempUser");
        String key = RedisKeys.getUserKey(temporaryUser.getUserId().toString());
        Gson gson = new Gson();
        String user = gson.toJson(temporaryUser, DsfUserEntity.class);
        redisTemplate.opsForValue().set(key, user);
        tempUserForm.setDsfRoleEntityList(new ArrayList<>(Arrays.asList(role)));
        redisTemplate.opsForValue().set(RedisKeys.getTokenKey(token),JSONObject.fromObject(tempUserForm).toString(),expire, TimeUnit.SECONDS);
        redisTemplate.opsForValue().set("do1:ydd:user"+token,JSONObject.fromObject(userInfoVo).toString(),expire, TimeUnit.SECONDS);
        return token;
    }

    /**
     * 从redis中获取移动端登录对象
     * @param token token key
     * @return
     */
    public UserInfoVo getYddUserInfo(String token){
        String userStr = redisTemplate.opsForValue().get("do1:ydd:user"+token);
        Gson gson = new Gson();
        UserInfoVo userInfoVo = gson.fromJson(userStr,UserInfoVo.class);
        return userInfoVo;
    }

    /**
     * 从redis中获取移动端登录对象
     * @param request http 请求对象
     * @return
     */
    public UserInfoVo getYddUserInfoFromRequest(HttpServletRequest request){
        String token = request.getHeader("X-Auth0-Token");
        UserInfoVo userInfoVo = getYddUserInfo(token);
        if (userInfoVo == null){
            throw new RestException(40001,"Token无效");
        }
        return userInfoVo;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值