萱草|记一次token安全认证的实践( 二 )
//获取生成token
Mapmap=newHashMap<>();
//建立载荷 , 这些数据根据业务 , 自己定义 。
map.put("uid",uid);
map.put("deptId",deptId);
map.put("userType",userType);
map.put("companyId",companyId);
//生成时间
map.put("sta",newDate().getTime());
//过期时间
map.put("exp",newDate().getTime()+1000*3600*24*15);
try{
Stringtoken=Token.creatToken(map);
System.out.println("token="+token);
returntoken;
}catch(JOSEExceptione){
System.out.println("生成token失败");
e.printStackTrace();
}
returnnull;
}
/**
*处理解析的业务逻辑gatewayJWT认证过滤器解析
*@paramtoken
*/
publicstaticMapValidToken(Stringtoken){
MapuserMsg=newHashMap();
//解析token
try{
if(token!=null){
MapvalidMap=Token.valid(token);
inti=(int)validMap.get("Result");
if(i==0){
log.info("token解析成功");
JSONObjectjsonObject=(JSONObject)validMap.get("data");
log.info("uid是:"+jsonObject.get("uid"));
log.info("deptId是:"+jsonObject.get("deptId"));
log.info("userType是:"+jsonObject.get("userType"));
log.info("companyId是:"+jsonObject.get("companyId"));
log.info("生成时间是:"+jsonObject.get("sta"));
log.info("过期时间是:"+jsonObject.get("exp"));
userMsg.put("token",token);
userMsg.put("uid",jsonObject.get("uid"));
userMsg.put("deptId",jsonObject.get("deptId"));
userMsg.put("companyId",jsonObject.get("companyId"));
userMsg.put("userType",jsonObject.get("userType"));
returnuserMsg;
}elseif(i==2){
log.info("token已经过期");
returnuserMsg;
}
}
}catch(ParseExceptione){
e.printStackTrace();
}catch(JOSEExceptione){
e.printStackTrace();
}
returnuserMsg;
}
publicstaticvoidmain(String[]ages){
//获取token
Longuid=1L;
LongdeptId=2L;
StringuserType="3";
intcompanyId=4;
Stringtoken=TokenTest(uid,deptId,userType,companyId);
//解析token
log.info(ValidToken(token).toString());
}
}
特别提示:以上工具类可以在用户登录授权接口中调用 , 用以生成token , 示例代码如下(可以借鉴不可复制哦 , 请根据自己业务逻辑在合适的地方调用TOKEN工具)
@RestController
@RequestMapping("/currency")
publicclassCurrencyLoginController{
//密钥(需要前端和后端保持一致)
privatestaticfinalStringKEY="abcdefgabcdefg12";
//redis初始KEY值
privatestaticfinalStringLOGIN_USER="login_user";
@Autowired
privateRedisUtilru;
@PostMapping("/login")
publicMapajaxLogin(Stringusername,Stringpassword,BooleanrememberMe)throwsException{
password=AESUtil.aesDecrypt(password,KEY);//双向加密规则
UsernamePasswordTokentoken=newUsernamePasswordToken(username,password,rememberMe);
Subjectsubject=SecurityUtils.getSubject();
try{
subject.login(token);
Useruser=ShiroUtils.getUser();
Stringaccess_token=Token.generateToken(user.getUserId(),user.getDeptId(),user.getLoginUserType(),user.getCompanyId());
UserMsgresultUser=newUserMsg();
推荐阅读
- 机大婶|在外吃饭不怕脏,和一次性餐具说再见!小米有品新上便携餐具盒
- 影视剪辑休闲屋|第二天就有收益,这也是平台给我的一次惊喜,第一次做影视剪辑
- 萱草|手机的全面屏时代真的来了吗?
- 萱草|涉嫌传销,社交电商进入优胜劣汰后半场,千团倒闭
- 忘川彼岸|小米,再见了
- 呱呱娱乐家|各国被震撼,美国:太疯狂了,怎么做到的?,中国一次运千吨大件
- 天文在线|蓝月亮真的是蓝色的吗?它下一次将何时到来?
- 科学家|万物都有意识吗?一次普通的植物实验,为何让人怀疑宇宙?
- 柳先说|中国品牌又一次成为销量冠军,印度嘴上说“抵制”:身体却很诚实
- 萱草|新能源汽车迎换电风口