From ea2b3e81640f74dc547ec44353b6c3fc39a7a50c Mon Sep 17 00:00:00 2001 From: fuzhengwei <184172133@qq.com> Date: Tue, 9 Jun 2020 23:39:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=B0=8F=E5=82=85=E5=93=A5=20|=20=E9=87=8D?= =?UTF-8?q?=E5=AD=A6=20Java=20=E8=AE=BE=E8=AE=A1=E6=A8=A1=E5=BC=8F?= =?UTF-8?q?=EF=BC=9A=E5=AE=9E=E6=88=98=E8=A3=85=E9=A5=B0=E5=99=A8=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F(SSO=E5=8D=95=E7=82=B9=E7=99=BB=E5=BD=95=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E6=89=A9=E5=B1=95=EF=BC=8C=E5=A2=9E=E5=8A=A0=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E7=94=A8=E6=88=B7=E8=AE=BF=E9=97=AE=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E8=8C=83=E5=9B=B4=E5=9C=BA=E6=99=AF)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 3 +- itstack-demo-design-9-00/pom.xml | 15 ++++++++ .../demo/design/HandlerInterceptor.java | 7 ++++ .../itstack/demo/design/SsoInterceptor.java | 12 +++++++ .../org/itstack/demo/design/test/ApiTest.java | 16 +++++++++ itstack-demo-design-9-01/pom.xml | 23 +++++++++++++ .../demo/design/LoginSsoDecorator.java | 32 +++++++++++++++++ .../org/itstack/demo/design/test/ApiTest.java | 16 +++++++++ itstack-demo-design-9-02/pom.xml | 23 +++++++++++++ .../demo/design/LoginSsoDecorator.java | 34 +++++++++++++++++++ .../org/itstack/demo/design/SsoDecorator.java | 17 ++++++++++ .../org/itstack/demo/design/test/ApiTest.java | 17 ++++++++++ pom.xml | 3 ++ 13 files changed, 217 insertions(+), 1 deletion(-) create mode 100644 itstack-demo-design-9-00/pom.xml create mode 100755 itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/HandlerInterceptor.java create mode 100755 itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/SsoInterceptor.java create mode 100755 itstack-demo-design-9-00/src/test/java/org/itstack/demo/design/test/ApiTest.java create mode 100644 itstack-demo-design-9-01/pom.xml create mode 100755 itstack-demo-design-9-01/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java create mode 100755 itstack-demo-design-9-01/src/test/java/org/itstack/demo/design/test/ApiTest.java create mode 100644 itstack-demo-design-9-02/pom.xml create mode 100755 itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java create mode 100755 itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/SsoDecorator.java create mode 100755 itstack-demo-design-9-02/src/test/java/org/itstack/demo/design/test/ApiTest.java diff --git a/README.md b/README.md index aa09349..3c7689f 100644 --- a/README.md +++ b/README.md @@ -12,4 +12,5 @@ - [1. 重学 Java 设计模式:适配器模式(多样MQ消息抽取需要数据)](https://bugstack.cn/itstack-demo-design/2020/06/02/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E9%80%82%E9%85%8D%E5%99%A8%E6%A8%A1%E5%BC%8F.html) - [2. 重学 Java 设计模式:实战桥接模式(多支付渠道「微信、支付宝」与多支付模式「刷脸、指纹」场景)](https://bugstack.cn/itstack-demo-design/2020/06/04/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%AE%9E%E6%88%98%E6%A1%A5%E6%8E%A5%E6%A8%A1%E5%BC%8F.html) -- [3. 重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)](https://bugstack.cn/itstack-demo-design/2020/06/08/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%AE%9E%E6%88%98%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F.html) \ No newline at end of file +- [3. 重学 Java 设计模式:实战组合模式(营销差异化人群发券,决策树引擎搭建场景)](https://bugstack.cn/itstack-demo-design/2020/06/08/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%AE%9E%E6%88%98%E7%BB%84%E5%90%88%E6%A8%A1%E5%BC%8F.html) +- [4. 重学 Java 设计模式:实战装饰器模式(SSO单点登录功能扩展,增加拦截用户访问方法范围场景)](https://bugstack.cn/itstack-demo-design/2020/06/09/%E9%87%8D%E5%AD%A6-Java-%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%AE%9E%E6%88%98%E8%A3%85%E9%A5%B0%E5%99%A8%E6%A8%A1%E5%BC%8F.html) \ No newline at end of file diff --git a/itstack-demo-design-9-00/pom.xml b/itstack-demo-design-9-00/pom.xml new file mode 100644 index 0000000..6d5160b --- /dev/null +++ b/itstack-demo-design-9-00/pom.xml @@ -0,0 +1,15 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-9-00 + + + \ No newline at end of file diff --git a/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/HandlerInterceptor.java b/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/HandlerInterceptor.java new file mode 100755 index 0000000..20e688f --- /dev/null +++ b/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/HandlerInterceptor.java @@ -0,0 +1,7 @@ +package org.itstack.demo.design; + +public interface HandlerInterceptor { + + boolean preHandle(String request, String response, Object handler); + +} diff --git a/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/SsoInterceptor.java b/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/SsoInterceptor.java new file mode 100755 index 0000000..c7eaa72 --- /dev/null +++ b/itstack-demo-design-9-00/src/main/java/org/itstack/demo/design/SsoInterceptor.java @@ -0,0 +1,12 @@ +package org.itstack.demo.design; + +public class SsoInterceptor implements HandlerInterceptor{ + + public boolean preHandle(String request, String response, Object handler) { + // 模拟获取cookie + String ticket = request.substring(1, 8); + // 模拟校验 + return ticket.equals("success"); + } + +} diff --git a/itstack-demo-design-9-00/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-9-00/src/test/java/org/itstack/demo/design/test/ApiTest.java new file mode 100755 index 0000000..55abd80 --- /dev/null +++ b/itstack-demo-design-9-00/src/test/java/org/itstack/demo/design/test/ApiTest.java @@ -0,0 +1,16 @@ +package org.itstack.demo.design.test; + +import org.itstack.demo.design.SsoInterceptor; +import org.junit.Test; + +public class ApiTest { + + @Test + public void test_sso() { + SsoInterceptor ssoInterceptor = new SsoInterceptor(); + String request = "1successhuahua"; + boolean success = ssoInterceptor.preHandle(request, "ewcdqwt40liuiu", "t"); + System.out.println("登录校验:" + request +(success ? " 放行" : " 拦截")); + } + +} diff --git a/itstack-demo-design-9-01/pom.xml b/itstack-demo-design-9-01/pom.xml new file mode 100644 index 0000000..f995e30 --- /dev/null +++ b/itstack-demo-design-9-01/pom.xml @@ -0,0 +1,23 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-9-01 + + + org.itstack + itstack-demo-design-9-00 + 1.0-SNAPSHOT + compile + + + + + \ No newline at end of file diff --git a/itstack-demo-design-9-01/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java b/itstack-demo-design-9-01/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java new file mode 100755 index 0000000..b4a3343 --- /dev/null +++ b/itstack-demo-design-9-01/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java @@ -0,0 +1,32 @@ +package org.itstack.demo.design; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class LoginSsoDecorator extends SsoInterceptor { + + private static Map authMap = new ConcurrentHashMap(); + + static { + authMap.put("huahua", "queryUserInfo"); + authMap.put("doudou", "queryUserInfo"); + } + + @Override + public boolean preHandle(String request, String response, Object handler) { + + // 模拟获取cookie + String ticket = request.substring(1, 8); + // 模拟校验 + boolean success = ticket.equals("success"); + + if (!success) return false; + + String userId = request.substring(9); + String method = authMap.get(userId); + + // 模拟方法校验 + return "queryUserInfo".equals(method); + } + +} diff --git a/itstack-demo-design-9-01/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-9-01/src/test/java/org/itstack/demo/design/test/ApiTest.java new file mode 100755 index 0000000..c5d0745 --- /dev/null +++ b/itstack-demo-design-9-01/src/test/java/org/itstack/demo/design/test/ApiTest.java @@ -0,0 +1,16 @@ +package org.itstack.demo.design.test; + +import org.itstack.demo.design.LoginSsoDecorator; +import org.junit.Test; + +public class ApiTest { + + @Test + public void test_LoginSsoDecorator() { + LoginSsoDecorator ssoDecorator = new LoginSsoDecorator(); + String request = "1successhuahua"; + boolean success = ssoDecorator.preHandle(request, "ewcdqwt40liuiu", "t"); + System.out.println("登录校验:" + request + (success ? " 放行" : " 拦截")); + } + +} diff --git a/itstack-demo-design-9-02/pom.xml b/itstack-demo-design-9-02/pom.xml new file mode 100644 index 0000000..bd0cf4e --- /dev/null +++ b/itstack-demo-design-9-02/pom.xml @@ -0,0 +1,23 @@ + + + + itstack-demo-design + org.itstack + 1.0-SNAPSHOT + + 4.0.0 + + itstack-demo-design-9-02 + + + org.itstack + itstack-demo-design-9-00 + 1.0-SNAPSHOT + compile + + + + + \ No newline at end of file diff --git a/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java b/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java new file mode 100755 index 0000000..1aefa10 --- /dev/null +++ b/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/LoginSsoDecorator.java @@ -0,0 +1,34 @@ +package org.itstack.demo.design; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +public class LoginSsoDecorator extends SsoDecorator { + + private Logger logger = LoggerFactory.getLogger(LoginSsoDecorator.class); + + private static Map authMap = new ConcurrentHashMap(); + + static { + authMap.put("huahua", "queryUserInfo"); + authMap.put("doudou", "queryUserInfo"); + } + + public LoginSsoDecorator(HandlerInterceptor handlerInterceptor) { + super(handlerInterceptor); + } + + @Override + public boolean preHandle(String request, String response, Object handler) { + boolean success = super.preHandle(request, response, handler); + if (!success) return false; + String userId = request.substring(8); + String method = authMap.get(userId); + logger.info("模拟单点登录方法访问拦截校验:{} {}", userId, method); + // 模拟方法校验 + return "queryUserInfo".equals(method); + } +} diff --git a/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/SsoDecorator.java b/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/SsoDecorator.java new file mode 100755 index 0000000..3563ad0 --- /dev/null +++ b/itstack-demo-design-9-02/src/main/java/org/itstack/demo/design/SsoDecorator.java @@ -0,0 +1,17 @@ +package org.itstack.demo.design; + +public abstract class SsoDecorator implements HandlerInterceptor { + + private HandlerInterceptor handlerInterceptor; + + private SsoDecorator(){} + + public SsoDecorator(HandlerInterceptor handlerInterceptor) { + this.handlerInterceptor = handlerInterceptor; + } + + public boolean preHandle(String request, String response, Object handler) { + return handlerInterceptor.preHandle(request, response, handler); + } + +} diff --git a/itstack-demo-design-9-02/src/test/java/org/itstack/demo/design/test/ApiTest.java b/itstack-demo-design-9-02/src/test/java/org/itstack/demo/design/test/ApiTest.java new file mode 100755 index 0000000..5a1b56a --- /dev/null +++ b/itstack-demo-design-9-02/src/test/java/org/itstack/demo/design/test/ApiTest.java @@ -0,0 +1,17 @@ +package org.itstack.demo.design.test; + +import org.itstack.demo.design.LoginSsoDecorator; +import org.itstack.demo.design.SsoInterceptor; +import org.junit.Test; + +public class ApiTest { + + @Test + public void test_LoginSsoDecorator() { + LoginSsoDecorator ssoDecorator = new LoginSsoDecorator(new SsoInterceptor()); + String request = "1successhuahua"; + boolean success = ssoDecorator.preHandle(request, "ewcdqwt40liuiu", "t"); + System.out.println("登录校验:" + request + (success ? " 放行" : " 拦截")); + } + +} diff --git a/pom.xml b/pom.xml index 7bc9320..18f3afc 100755 --- a/pom.xml +++ b/pom.xml @@ -30,6 +30,9 @@ itstack-demo-design-7-02 itstack-demo-design-8-01 itstack-demo-design-8-02 + itstack-demo-design-9-00 + itstack-demo-design-9-01 + itstack-demo-design-9-02 -- GitLab