Commit 8d3b684c by giaogiao

优化shiro

parent 104c3297
......@@ -27,23 +27,11 @@ package io.geekidea.springbootplus.config.constant;
public interface AppLoginRedisKey {
/**
* 登录用户token信息key
* login:token:tokenMd5
*/
String LOGIN_TOKEN = "sys:login:token:%s";
/**
* 登录用户信息key
* login:user:username
*/
String LOGIN_USER = "app:login:user:%s";
/**
* 登录用户盐值信息key
* login:salt:username
*/
// String LOGIN_SALT = "app:login:salt:%s";
String LOGIN_SALT = "sys:login:salt:%s";
/**
......
......@@ -27,6 +27,18 @@ package io.geekidea.springbootplus.config.constant;
public interface CommonRedisKey {
/**
* 登录用户token信息key
* login:token:tokenMd5
*/
String LOGIN_TOKEN = "login:token:%s";
/**
* 登录用户盐值信息key
* login:salt:username
*/
String LOGIN_SALT = "login:salt:%s";
/**
* 验证码
* verify.code:666666
*/
......
......@@ -27,24 +27,12 @@ package io.geekidea.springbootplus.config.constant;
public interface MerchantLoginRedisKey {
/**
* 登录用户token信息key
* login:token:tokenMd5
*/
String LOGIN_TOKEN = "sys:login:token:%s";
/**
* 登录用户信息key
* login:user:username
*/
String LOGIN_USER = "mer:login:user:%s";
/**
* 登录用户盐值信息key
* login:salt:username
*/
String LOGIN_SALT = "sys:login:salt:%s";
/**
* 登录用户username token
* login:user:token:username:token
*/
......
......@@ -27,24 +27,12 @@ package io.geekidea.springbootplus.config.constant;
public interface SysLoginRedisKey {
/**
* 登录用户token信息key
* login:token:tokenMd5
*/
String LOGIN_TOKEN = "sys:login:token:%s";
/**
* 登录用户信息key
* login:user:username
*/
String LOGIN_USER = "sys:login:user:%s";
/**
* 登录用户盐值信息key
* login:salt:username
*/
String LOGIN_SALT = "sys:login:salt:%s";
/**
* 登录用户username token
* login:user:token:username:token
*/
......
package io.geekidea.springbootplus.framework.shiro.cache.impl;
import io.geekidea.springbootplus.config.constant.AppLoginRedisKey;
import io.geekidea.springbootplus.config.constant.CommonRedisKey;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.bean.ClientInfo;
import io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService;
......@@ -80,12 +81,12 @@ public class AppLoginRedisServiceImpl implements AppLoginRedisService {
}
// 1. tokenMd5:jwtTokenRedisVo
String loginTokenRedisKey = String.format(AppLoginRedisKey.LOGIN_TOKEN, tokenMd5);
String loginTokenRedisKey = String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5);
redisTemplate.opsForValue().set(loginTokenRedisKey, jwtTokenRedisVo, expireDuration);
// 2. username:loginSysUserRedisVo
redisTemplate.opsForValue().set(String.format(AppLoginRedisKey.LOGIN_USER, username), loginSysUserRedisVo, expireDuration);
// 3. salt hash,方便获取盐值鉴权
redisTemplate.opsForValue().set(String.format(AppLoginRedisKey.LOGIN_SALT, username), salt, expireDuration);
redisTemplate.opsForValue().set(String.format(CommonRedisKey.LOGIN_SALT, username), salt, expireDuration);
// 4. login user token
redisTemplate.opsForValue().set(String.format(AppLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5), loginTokenRedisKey, expireDuration);
}
......@@ -122,7 +123,7 @@ public class AppLoginRedisServiceImpl implements AppLoginRedisService {
if (StringUtils.isBlank(username)) {
throw new IllegalArgumentException("username不能为空");
}
String salt = (String) redisTemplate.opsForValue().get(String.format(AppLoginRedisKey.LOGIN_SALT, username));
String salt = (String) redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_SALT, username));
return salt;
}
......@@ -136,11 +137,11 @@ public class AppLoginRedisServiceImpl implements AppLoginRedisService {
}
String tokenMd5 = DigestUtils.md5Hex(token);
// 1. delete tokenMd5
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_TOKEN, tokenMd5));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
// 2. delete username
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_USER, username));
// 3. delete salt
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
// 4. delete user token
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5));
}
......@@ -151,7 +152,7 @@ public class AppLoginRedisServiceImpl implements AppLoginRedisService {
throw new IllegalArgumentException("token不能为空");
}
String tokenMd5 = DigestUtils.md5Hex(token);
Object object = redisTemplate.opsForValue().get(String.format(AppLoginRedisKey.LOGIN_TOKEN, tokenMd5));
Object object = redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
return object != null;
}
......@@ -170,7 +171,7 @@ public class AppLoginRedisServiceImpl implements AppLoginRedisService {
// 3. 删除登录用户信息
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_USER, username));
// 4. 删除登录用户盐值信息
redisTemplate.delete(String.format(AppLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
}
......
package io.geekidea.springbootplus.framework.shiro.cache.impl;
import io.geekidea.springbootplus.config.constant.CommonRedisKey;
import io.geekidea.springbootplus.config.constant.MerchantLoginRedisKey;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.bean.ClientInfo;
......@@ -79,12 +80,12 @@ public class MerchantLoginRedisServiceImpl implements MerchantLoginRedisService
}
// 1. tokenMd5:jwtTokenRedisVo
String loginTokenRedisKey = String.format(MerchantLoginRedisKey.LOGIN_TOKEN, tokenMd5);
String loginTokenRedisKey = String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5);
redisTemplate.opsForValue().set(loginTokenRedisKey, jwtTokenRedisVo, expireDuration);
// 2. username:loginSysUserRedisVo
redisTemplate.opsForValue().set(String.format(MerchantLoginRedisKey.LOGIN_USER, username), loginSysUserRedisVo, expireDuration);
// 3. salt hash,方便获取盐值鉴权
redisTemplate.opsForValue().set(String.format(MerchantLoginRedisKey.LOGIN_SALT, username), salt, expireDuration);
redisTemplate.opsForValue().set(String.format(CommonRedisKey.LOGIN_SALT, username), salt, expireDuration);
// 4. login user token
redisTemplate.opsForValue().set(String.format(MerchantLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5), loginTokenRedisKey, expireDuration);
}
......@@ -121,7 +122,7 @@ public class MerchantLoginRedisServiceImpl implements MerchantLoginRedisService
if (StringUtils.isBlank(username)) {
throw new IllegalArgumentException("username不能为空");
}
String salt = (String) redisTemplate.opsForValue().get(String.format(MerchantLoginRedisKey.LOGIN_SALT, username));
String salt = (String) redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_SALT, username));
return salt;
}
......@@ -135,11 +136,11 @@ public class MerchantLoginRedisServiceImpl implements MerchantLoginRedisService
}
String tokenMd5 = DigestUtils.md5Hex(token);
// 1. delete tokenMd5
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_TOKEN, tokenMd5));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
// 2. delete username
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_USER, username));
// 3. delete salt
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
// 4. delete user token
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5));
}
......@@ -150,7 +151,7 @@ public class MerchantLoginRedisServiceImpl implements MerchantLoginRedisService
throw new IllegalArgumentException("token不能为空");
}
String tokenMd5 = DigestUtils.md5Hex(token);
Object object = redisTemplate.opsForValue().get(String.format(MerchantLoginRedisKey.LOGIN_TOKEN, tokenMd5));
Object object = redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
return object != null;
}
......@@ -169,7 +170,7 @@ public class MerchantLoginRedisServiceImpl implements MerchantLoginRedisService
// 3. 删除登录用户信息
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_USER, username));
// 4. 删除登录用户盐值信息
redisTemplate.delete(String.format(MerchantLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
}
......
......@@ -16,6 +16,7 @@
package io.geekidea.springbootplus.framework.shiro.cache.impl;
import io.geekidea.springbootplus.config.constant.CommonRedisKey;
import io.geekidea.springbootplus.config.constant.SysLoginRedisKey;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.bean.ClientInfo;
......@@ -102,12 +103,12 @@ public class SysLoginRedisServiceImpl implements SysLoginRedisService {
}
// 1. tokenMd5:jwtTokenRedisVo
String loginTokenRedisKey = String.format(SysLoginRedisKey.LOGIN_TOKEN, tokenMd5);
String loginTokenRedisKey = String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5);
redisTemplate.opsForValue().set(loginTokenRedisKey, jwtTokenRedisVo, expireDuration);
// 2. username:loginSysUserRedisVo
redisTemplate.opsForValue().set(String.format(SysLoginRedisKey.LOGIN_USER, username), loginSysUserRedisVo, expireDuration);
// 3. salt hash,方便获取盐值鉴权
redisTemplate.opsForValue().set(String.format(SysLoginRedisKey.LOGIN_SALT, username), salt, expireDuration);
redisTemplate.opsForValue().set(String.format(CommonRedisKey.LOGIN_SALT, username), salt, expireDuration);
// 4. login user token
redisTemplate.opsForValue().set(String.format(SysLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5), loginTokenRedisKey, expireDuration);
}
......@@ -144,7 +145,7 @@ public class SysLoginRedisServiceImpl implements SysLoginRedisService {
if (StringUtils.isBlank(username)) {
throw new IllegalArgumentException("username不能为空");
}
String salt = (String) redisTemplate.opsForValue().get(String.format(SysLoginRedisKey.LOGIN_SALT, username));
String salt = (String) redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_SALT, username));
return salt;
}
......@@ -158,11 +159,11 @@ public class SysLoginRedisServiceImpl implements SysLoginRedisService {
}
String tokenMd5 = DigestUtils.md5Hex(token);
// 1. delete tokenMd5
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_TOKEN, tokenMd5));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
// 2. delete username
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_USER, username));
// 3. delete salt
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
// 4. delete user token
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_USER_TOKEN, username, tokenMd5));
}
......@@ -173,7 +174,7 @@ public class SysLoginRedisServiceImpl implements SysLoginRedisService {
throw new IllegalArgumentException("token不能为空");
}
String tokenMd5 = DigestUtils.md5Hex(token);
Object object = redisTemplate.opsForValue().get(String.format(SysLoginRedisKey.LOGIN_TOKEN, tokenMd5));
Object object = redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
return object != null;
}
......@@ -192,7 +193,7 @@ public class SysLoginRedisServiceImpl implements SysLoginRedisService {
// 3. 删除登录用户信息
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_USER, username));
// 4. 删除登录用户盐值信息
redisTemplate.delete(String.format(SysLoginRedisKey.LOGIN_SALT, username));
redisTemplate.delete(String.format(CommonRedisKey.LOGIN_SALT, username));
}
......
......@@ -16,7 +16,7 @@
package io.geekidea.springbootplus.framework.shiro.jwt;
import io.geekidea.springbootplus.config.constant.SysLoginRedisKey;
import io.geekidea.springbootplus.config.constant.CommonRedisKey;
import io.geekidea.springbootplus.config.properties.JwtProperties;
import io.geekidea.springbootplus.framework.common.api.ApiCode;
import io.geekidea.springbootplus.framework.common.api.ApiResult;
......@@ -85,7 +85,7 @@ public class JwtFilter extends AuthenticatingFilter {
// 如果开启redis二次校验,或者设置为单个用户token登录,则先在redis中判断token是否存在
if (jwtProperties.isRedisCheck() || jwtProperties.isSingleLogin()) {
String tokenMd5 = DigestUtils.md5Hex(token);
jwtTokenRedisVo = redisTemplate.opsForValue().get(String.format(SysLoginRedisKey.LOGIN_TOKEN, tokenMd5));
jwtTokenRedisVo = redisTemplate.opsForValue().get(String.format(CommonRedisKey.LOGIN_TOKEN, tokenMd5));
// boolean redisExpired = sysLoginRedisService.exists(token);
if (jwtTokenRedisVo == null) {
throw new AuthenticationException("Redis Token不存在,token:" + token);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment