From ee01a65d92f27567f147d50c8da83ac17f492991 Mon Sep 17 00:00:00 2001 From: Chopper Date: Fri, 11 Jun 2021 15:39:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B9=B0=E5=AE=B6=E7=AB=AF=E7=99=BB=E5=BD=95?= =?UTF-8?q?=E8=B7=B3=E8=BD=AC=E9=97=AE=E9=A2=98=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../connect/ConnectBuyerWebController.java | 5 +- .../modules/connect/util/ConnectUtil.java | 49 +++++++++++++++++-- 2 files changed, 48 insertions(+), 6 deletions(-) diff --git a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java index 0f475c12..d4315341 100644 --- a/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java +++ b/buyer-api/src/main/java/cn/lili/controller/passport/connect/ConnectBuyerWebController.java @@ -20,6 +20,7 @@ import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -60,8 +61,8 @@ public class ConnectBuyerWebController { @ApiOperation(value = "信任登录统一回调地址", hidden = true) @GetMapping("/callback/{type}") - public void callBack(@PathVariable String type, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException { - connectUtil.callback(type, callback, httpServletResponse); + public void callBack(@PathVariable String type, AuthCallback callback, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { + connectUtil.callback(type, callback,httpServletRequest, httpServletResponse); } @ApiOperation(value = "信任登录响应结果获取") diff --git a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java index 3b50fe43..a2f25f5c 100644 --- a/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java +++ b/framework/src/main/java/cn/lili/modules/connect/util/ConnectUtil.java @@ -4,9 +4,9 @@ import cn.hutool.json.JSONUtil; import cn.lili.common.cache.Cache; import cn.lili.common.cache.CachePrefix; import cn.lili.common.enums.ResultCode; +import cn.lili.common.enums.ResultUtil; import cn.lili.common.exception.ServiceException; import cn.lili.common.token.Token; -import cn.lili.common.enums.ResultUtil; import cn.lili.common.vo.ResultMessage; import cn.lili.config.properties.ApiProperties; import cn.lili.config.properties.DomainProperties; @@ -32,8 +32,11 @@ import cn.lili.modules.system.service.SettingService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * 联合登陆工具类 @@ -70,9 +73,10 @@ public class ConnectUtil { * @param type * @param callback * @param httpServletResponse + * @param httpServletRequest * @throws IOException */ - public void callback(String type, AuthCallback callback, HttpServletResponse httpServletResponse) throws IOException { + public void callback(String type, AuthCallback callback, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException { AuthRequest authRequest = this.getAuthRequest(type); AuthResponse response = authRequest.login(callback); ResultMessage resultMessage; @@ -94,8 +98,11 @@ public class ConnectUtil { //缓存写入登录结果,300秒有效 cache.put(CachePrefix.CONNECT_RESULT.getPrefix() + callback.getCode(), resultMessage, 300L); -// String url = buyer + "/login?state=" + callback.getCode(); - String url = domainProperties.getWap() + "/pages/public/login?state=" + callback.getCode(); + //跳转地址 + String url = this.check(httpServletRequest.getHeader("user-agent")) ? + domainProperties.getWap() + "/pages/passport/login?state=" + callback.getCode() : + domainProperties.getPc() + "/login?state=" + callback.getCode(); + try { httpServletResponse.sendRedirect(url); } catch (Exception e) { @@ -222,6 +229,40 @@ public class ConnectUtil { return authRequest; } + // \b 是单词边界(连着的两个(字母字符 与 非字母字符) 之间的逻辑上的间隔), + // 字符串在编译时会被转码一次,所以是 "\\b" + // \B 是单词内部逻辑间隔(连着的两个字母字符之间的逻辑上的间隔) + static String phoneReg = "\\b(ip(hone|od)|android|opera m(ob|in)i" + + "|windows (phone|ce)|blackberry" + + "|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp" + + "|laystation portable)|nokia|fennec|htc[-_]" + + "|mobile|up.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\\b"; + static String tableReg = "\\b(ipad|tablet|(Nexus 7)|up.browser" + + "|[1-4][0-9]{2}x[1-4][0-9]{2})\\b"; + //移动设备正则匹配:手机端、平板 + static Pattern phonePat = Pattern.compile(phoneReg, Pattern.CASE_INSENSITIVE); + static Pattern tablePat = Pattern.compile(tableReg, Pattern.CASE_INSENSITIVE); + + /** + * 检测是否是移动设备访问 + * + * @param userAgent 浏览器标识 + * @return true:移动设备接入,false:pc端接入 + * @Title: check + */ + private boolean check(String userAgent) { + if (null == userAgent) { + userAgent = ""; + } + // 匹配 + Matcher matcherPhone = phonePat.matcher(userAgent); + Matcher matcherTable = tablePat.matcher(userAgent); + if (matcherPhone.find() || matcherTable.find()) { + return true; + } else { + return false; + } + } }