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