From d08abc8c7ef7aac263516414d5bc5d95cad16582 Mon Sep 17 00:00:00 2001 From: yitonglei Date: Tue, 14 Feb 2023 15:53:56 +0800 Subject: [PATCH] =?UTF-8?q?1.user=E6=A8=A1=E5=9D=97=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E9=87=91=E5=AE=8F=E8=AE=A4=E8=AF=81=EF=BC=8C=E8=BF=98=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lab-common/pom.xml | 7 + lab-gateway/pom.xml | 4 + .../springblade/system/jinhong/BaseUtils.java | 35 ++++ .../system/jinhong/IdentityInterceptor.java | 156 ++++++++++++++++++ .../springblade/system/jinhong/Validator.java | 90 ++++++++++ .../user/service/impl/UserServiceImpl.java | 1 - .../src/main/resources/config.properties | 5 + 7 files changed, 297 insertions(+), 1 deletion(-) create mode 100644 lab-service/lab-user/src/main/java/org/springblade/system/jinhong/BaseUtils.java create mode 100644 lab-service/lab-user/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java create mode 100644 lab-service/lab-user/src/main/java/org/springblade/system/jinhong/Validator.java create mode 100644 lab-service/lab-user/src/main/resources/config.properties diff --git a/lab-common/pom.xml b/lab-common/pom.xml index 5f7791d..608493b 100644 --- a/lab-common/pom.xml +++ b/lab-common/pom.xml @@ -38,6 +38,13 @@ ant 1.9.1 + + com.yawei.oav2 + yawei-pso + 2.0.2 + system + ${pom.basedir}/src/main/resources/lib/yawei-pso-2.0.2.jar + diff --git a/lab-gateway/pom.xml b/lab-gateway/pom.xml index 2ce0f1e..bd34bd1 100644 --- a/lab-gateway/pom.xml +++ b/lab-gateway/pom.xml @@ -44,6 +44,10 @@ org.springblade blade-core-launch + + com.yawei.oav2 + yawei-pso + diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/BaseUtils.java b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/BaseUtils.java new file mode 100644 index 0000000..c3a7b6a --- /dev/null +++ b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/BaseUtils.java @@ -0,0 +1,35 @@ +package org.springblade.system.jinhong; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Properties; + +public class BaseUtils +{ + /** + * 获取配置文件中的配置信息 + * + * @param key配置文件key值 + * @return + * @throws IOException + */ + public static String getConfigValue(String key) + { + try + { + Properties props = new Properties(); + InputStream in = BaseUtils.class.getClassLoader() + .getResourceAsStream("config.properties"); + BufferedReader bf = new BufferedReader(new InputStreamReader(in, + "UTF-8")); + props.load(bf); + return props.getProperty(key); + } + catch (IOException ex) + { + return ""; + } + } +} diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java new file mode 100644 index 0000000..8d51a82 --- /dev/null +++ b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/IdentityInterceptor.java @@ -0,0 +1,156 @@ +package org.springblade.system.jinhong; + +import java.net.URLEncoder; +import java.util.Iterator; +import java.util.Map.Entry; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import com.yawei.pso.PSORequest; +import com.yawei.pso.SSOResponse; +import com.yawei.pso.TicketManager; + +/** + * 自定义拦截器,拦截符合条件url的请求 身份验证拦截 + * (是否有登录用户信息) + */ +@Slf4j +@Component +public class IdentityInterceptor extends HandlerInterceptorAdapter +{ + + // 读取ssoToken参数 + private static final String strToken = BaseUtils.getConfigValue("ssoKey"); + + public final static String SEESION_USER = "seesion_user"; + + /** + * 在业务处理器处理请求之前被调用 如果返回false 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 + * 如果返回true 执行下一个拦截器,直到所有的拦截器都执行完毕 再执行被拦截的Controller 然后进入拦截器链, + * 从最后一个拦截器往回执行所有的postHandle() 接着再从最后一个拦截器往回执行所有的afterCompletion() + */ + @Override + public boolean preHandle(HttpServletRequest request, + HttpServletResponse response, Object handler) throws Exception + { + + log.debug("==============执行顺序: 1、preHandle================"); + // 获取当前请求的url + String requestUri = request.getRequestURI(); + + Validator validator = Validator.getInstance(); + // 注入当前session + // validator.init(request); + + String strResponse = request.getParameter(strToken); + + //真实环境需要放开如下注释 + /** + * + + if (strResponse != null) + { + // 如果服务器端通过认证后,会返回后执行改操作,然后写入cookie + SSOResponse ssoResp = new SSOResponse(strResponse); + TicketManager tm = ssoResp.CreatePSOTicket(); + if (tm == null) + { + PSORequest psoRequest = new PSORequest(request); + String requeststr = psoRequest.CreateHash(); + + String keeperUrl = BaseUtils.getConfigValue("keeperUrl"); + keeperUrl = keeperUrl + "?" + strToken + "=" + + URLEncoder.encode(requeststr, "UTF-8"); + response.sendRedirect(keeperUrl); + } + else + { + String domainName = BaseUtils.getConfigValue("domain"); + tm.SaveTicket(response, domainName); + + Iterator> iterator = request + .getParameterMap().entrySet().iterator(); + StringBuffer param = new StringBuffer(); + int i = 0; + while (iterator.hasNext()) + { + Entry entry = (Entry) iterator + .next(); + if (entry.getKey().equals(strToken)) + continue; + else + { + i++; + if (i == 1) + param.append("?").append(entry.getKey()) + .append("="); + else + param.append("&").append(entry.getKey()) + .append("="); + + if (entry.getValue() instanceof String[]) + { + param.append(((String[]) entry.getValue())[0]); + } + else + { + param.append(entry.getValue()); + } + } + } + response.sendRedirect(requestUri + param.toString()); + return false; + } + } + else + { + TicketManager tm = new TicketManager(); + if (!tm.LoadTicket(request)) + { + PSORequest psoRequest = new PSORequest(request); + String requeststr = psoRequest.CreateHash(); + + String keeperUrl = BaseUtils.getConfigValue("keeperUrl"); + keeperUrl = keeperUrl + "?" + strToken + "=" + + URLEncoder.encode(requeststr, "UTF-8"); + response.sendRedirect(keeperUrl); + return false; + } + } + + validator.SetUserTicket(request); + return true; + */ + return false; + } + + /** + * 在业务处理器处理请求执行完成后,生成视图之前执行的动作 可在modelAndView中加入数据,比如当前时间 + */ + @Override + public void postHandle(HttpServletRequest request, + HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception + { + log.debug("==============执行顺序: 2、postHandle================"); + } + + /** + * 在DispatcherServlet完全处理完请求后被调用,可用于清理资源等 + * + * 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() + */ + @Override + public void afterCompletion(HttpServletRequest request, + HttpServletResponse response, Object handler, Exception ex) + throws Exception + { + log.debug("==============执行顺序: 3、afterCompletion================"); + } +} diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/Validator.java b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/Validator.java new file mode 100644 index 0000000..7bc8e81 --- /dev/null +++ b/lab-service/lab-user/src/main/java/org/springblade/system/jinhong/Validator.java @@ -0,0 +1,90 @@ +package org.springblade.system.jinhong; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; + +import com.yawei.pso.TicketManager; + +/** + * 验证器 + */ +public class Validator +{ + private static ThreadLocal validatorHolder = new ThreadLocal() + { + + protected Validator initialValue() + { + return new Validator(); + } + + }; + + // 当前请求的session + private HttpSession session = null; + + // 当前的请求 + private HttpServletRequest request = null; + + private Validator() + { + } + + public static Validator getInstance() + { + return validatorHolder.get(); + } + + /** + * 执行初始化 + * @param httpRequest + */ + public void init(HttpServletRequest httpRequest) + { + this.request = httpRequest; + this.session = request.getSession(); + } + + /** + * 将凭证身份加入到session + * @param httpRequest + */ + public void SetUserTicket(HttpServletRequest httpRequest) + { + try + { + if (httpRequest.getSession() + .getAttribute(IdentityInterceptor.SEESION_USER) == null) + { + TicketManager ticket = new TicketManager(); + if (ticket.LoadTicket(httpRequest)) + { + // 登录用户姓名 + String userName = ticket.getUserName(); + // 登录用户账号 + String userAccount = ticket.getUserID(); + // 登录用户标识 + String userGuid = ticket.getADGUID(); + System.out.println("===userName===" + userName); + System.out.println("===userAccount===" + userAccount); + System.out.println("===userGuid===" + userGuid); + } + } + else + { + } + } + catch (Exception ex) + { + } + } + + /** + * 清除session + */ + public void cancel() + { + this.session = null; + } + +} diff --git a/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java b/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java index 580fb2c..b419a1f 100644 --- a/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java +++ b/lab-service/lab-user/src/main/java/org/springblade/system/user/service/impl/UserServiceImpl.java @@ -296,7 +296,6 @@ public class UserServiceImpl extends BaseServiceImpl implement // queryWrapper.like(User::getRoleId, "1432876315142520834"); // } - IPage page = Condition.getPage(query); IPage pages = this.page(Condition.getPage(query), queryWrapper); return UserWrapper.build().pageVO(pages); } diff --git a/lab-service/lab-user/src/main/resources/config.properties b/lab-service/lab-user/src/main/resources/config.properties new file mode 100644 index 0000000..11cee05 --- /dev/null +++ b/lab-service/lab-user/src/main/resources/config.properties @@ -0,0 +1,5 @@ +#系统配置信息 +#认证配置 +domain=yw.com.cn +ssoKey=SSOToken +keeperUrl=http://localhost:8088/Keeper.aspx \ No newline at end of file