目录
- 1 问题
- 2 实现
1 问题
springboot 项目需要实现对用户的加密和解密
用户登陆之后,对用户信息进行加密存到cookie ,之后访问页面的时候,携带这个cokkie 到其他的页面,然后进行解密,只要cookie 过期,那么页面就访问不了
2 实现
1 实体类
用户信息的实体类
import com.alibaba.fastjson.JSONObject;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;@Data
@ApiModel
@AllArgsConstructor
@NoArgsConstructor
@ToString
public class UserToken {/*** sessionID 用来判断是否过期*/private String sessionId;/*** 用户id*/@JsonSerialize(using = ToStringSerializer.class)private Long id;/*** 账号*/private String account;/*** 密码*/private String password;/*** 用户名*/private String username;/*** 角色编号*/private Integer roleIndex;/*** 角色名*/private String roleName;/*** 组织机构id*/private Long orgId;/*** 组织机构名*/private String orgName;/*** 组织机构树*/private String orgTree;public UserToken(String account, String password) {this.account = account;this.password = password;}public String toJsonString() {return JSONObject.toJSONString(this);}}
2 加密解密的工具类
package cn.hongt.cmacast.server.config.token;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringUtils;import java.nio.charset.StandardCharsets;
import java.util.Base64;/*** @ClassName: TokenTool* @Description:* @Author: jing**/
public class TokenTool {//加密的字符串,相当于签名private static final String SINGNATURE_TOKEN = "PIESAT_TOKEN";/*** 将用户信息加密* */public static String encoder(String userInfo) {if (StringUtils.isEmpty(userInfo)) {return null;}//获取编码器Base64.Encoder encoder = Base64.getEncoder();String singnatureBase64 = encoder.encodeToString(SINGNATURE_TOKEN.getBytes(StandardCharsets.UTF_8));String s = encoder.encodeToString(userInfo.getBytes());return singnatureBase64 + s;}/*** 根据Token获取用户信息 解码字符串** @param token* @return*/public static String decoder(String token) {if (StringUtils.