From 96a70b722b54fb14f01e45b0001bc117b1f4b8d9 Mon Sep 17 00:00:00 2001 From: dongxiayu Date: Wed, 6 Jul 2022 01:17:01 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9B=B4=E6=96=B0=E3=80=91token?= =?UTF-8?q?=E7=99=BB=E9=99=86=E9=AA=8C=E8=AF=81=E6=96=B9=E6=B3=95=E6=8F=90?= =?UTF-8?q?=E4=BA=A4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../core/context/login/LoginContext.java | 18 ++++++++++ .../xiaonuo/core/util/HttpServletUtil.java | 32 +++++++++++++++++ .../LoginContextSpringSecurityImpl.java | 36 +++++++++++++++++++ 3 files changed, 86 insertions(+) diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/login/LoginContext.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/login/LoginContext.java index 52b33e26..fcf59dd2 100644 --- a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/login/LoginContext.java +++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/context/login/LoginContext.java @@ -45,6 +45,15 @@ public interface LoginContext { */ SysLoginUser getSysLoginUser(); + /** + * 根据token获取当前登录用户 + * + * @return 当前登录用户信息 + * @author dongxiayu + * @date 2022/7/2 0:22 + */ + SysLoginUser getSysLoginUserByToken(String token); + /** * 获取当前登录用户,如未登录,则返回null,不抛异常 * @@ -72,6 +81,15 @@ public interface LoginContext { */ boolean hasLogin(); + /** + * 根据token判断用户是否登录 + * + * @return 是否登录,true是,false否 + * @author dongxiayu + * @date 2022/7/2 0:22 + */ + boolean hasLoginByToken(String token); + /** * 获取当前登录用户的账户 * diff --git a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/util/HttpServletUtil.java b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/util/HttpServletUtil.java index 09d465fe..604d280e 100644 --- a/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/util/HttpServletUtil.java +++ b/snowy-base/snowy-core/src/main/java/vip/xiaonuo/core/util/HttpServletUtil.java @@ -24,13 +24,20 @@ Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意 */ package vip.xiaonuo.core.util; +import cn.hutool.core.util.CharsetUtil; +import cn.hutool.core.util.StrUtil; +import cn.hutool.http.HttpUtil; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; +import vip.xiaonuo.core.consts.CommonConstant; +import vip.xiaonuo.core.context.constant.ConstantContextHolder; import vip.xiaonuo.core.exception.ServiceException; import vip.xiaonuo.core.exception.enums.ServerExceptionEnum; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.util.Map; +import java.util.Objects; /** * HttpServlet工具类,获取当前request和response @@ -39,6 +46,11 @@ import javax.servlet.http.HttpServletResponse; * @date 2020/3/30 15:09 */ public class HttpServletUtil { + /** 编码 **/ + private static final String ENCODED = "UTF-8"; + + /** 引用 **/ + private static final String REFERER = "referer"; /** * 获取当前请求的request对象 @@ -69,4 +81,24 @@ public class HttpServletUtil { return requestAttributes.getResponse(); } } + + /** + * @description 从header.referer获取token信息 + * @author dongxiayu + * @date 2022/7/2 0:46 + * @return + **/ + public static String getTokenFromReferer(){ + String refererContent = HttpServletUtil.getRequest().getHeader(REFERER); + Map paramMap = HttpUtil.decodeParamMap(refererContent, CharsetUtil.charset(ENCODED)); + String token = Objects.nonNull(paramMap)?paramMap.get(CommonConstant.TOKEN_NAME):null; + if(StrUtil.isNotBlank(token)){ + // 判断是否开启了加密 + if (ConstantContextHolder.getCryptogramConfigs().getTokenEncDec()) { + // 解密token + token = CryptogramUtil.doDecrypt(token); + } + } + return token; + } } diff --git a/snowy-base/snowy-system/src/main/java/vip/xiaonuo/sys/modular/auth/context/LoginContextSpringSecurityImpl.java b/snowy-base/snowy-system/src/main/java/vip/xiaonuo/sys/modular/auth/context/LoginContextSpringSecurityImpl.java index f2d54dc1..ba17aa3c 100644 --- a/snowy-base/snowy-system/src/main/java/vip/xiaonuo/sys/modular/auth/context/LoginContextSpringSecurityImpl.java +++ b/snowy-base/snowy-system/src/main/java/vip/xiaonuo/sys/modular/auth/context/LoginContextSpringSecurityImpl.java @@ -45,6 +45,7 @@ import vip.xiaonuo.sys.modular.user.service.SysUserService; import javax.annotation.Resource; import java.util.List; +import java.util.Objects; /** * 登录用户上下文实现类 @@ -81,6 +82,19 @@ public class LoginContextSpringSecurityImpl implements LoginContext { } } + /** + * 根据token获取当前登录用户 + * + * @param token + * @return 当前登录用户信息 + * @author dongxiayu + * @date 2022/7/2 0:22 + */ + @Override + public SysLoginUser getSysLoginUserByToken(String token) { + return authService.getLoginUserByToken(token); + } + /** * 获取当前登录用户,如未登录,则返回null,不抛异常 * @@ -124,6 +138,28 @@ public class LoginContextSpringSecurityImpl implements LoginContext { } } + /** + * 根据token判断用户是否登录 + * + * @param token + * @return 是否登录,true是,false否 + * @author dongxiayu + * @date 2022/7/2 0:22 + */ + @Override + public boolean hasLoginByToken(String token) { + boolean ret = false; + try { + SysLoginUser sysLoginUser = authService.getLoginUserByToken(token); + if(Objects.nonNull(sysLoginUser)){ + ret = true; + } + }catch (Exception e){ + ret = false; + } + return ret; + } + /** * 获取当前登录的用户账号 *