From a808e46a8ab36df0d238e7647615a71834efc38b Mon Sep 17 00:00:00 2001 From: wanggeng888 <450292408@qq.com> Date: Fri, 23 Apr 2021 12:44:00 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=87=E6=BB=A4=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../gateway/filter/wg/WebFluxFilter.java | 55 +++++++++++++++++-- .../gateway/handler/sign/SignHandler.java | 26 +++++++++ 2 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 src/main/java/ink/wgink/gateway/handler/sign/SignHandler.java diff --git a/src/main/java/ink/wgink/gateway/filter/wg/WebFluxFilter.java b/src/main/java/ink/wgink/gateway/filter/wg/WebFluxFilter.java index 4ac1525..f381886 100644 --- a/src/main/java/ink/wgink/gateway/filter/wg/WebFluxFilter.java +++ b/src/main/java/ink/wgink/gateway/filter/wg/WebFluxFilter.java @@ -1,11 +1,21 @@ package ink.wgink.gateway.filter.wg; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.stereotype.Component; import org.springframework.web.server.ServerWebExchange; import org.springframework.web.server.WebFilter; import org.springframework.web.server.WebFilterChain; +import org.springframework.web.server.WebSession; +import org.springframework.web.util.pattern.PathPattern; +import org.springframework.web.util.pattern.PathPatternParser; import reactor.core.publisher.Mono; +import java.net.URI; +import java.util.Arrays; +import java.util.List; + /** * When you feel like quitting. Think about why you started * 当你想要放弃的时候,想想当初你为何开始 @@ -16,16 +26,53 @@ import reactor.core.publisher.Mono; * @Date: 2021/4/14 2:42 下午 * @Version: 1.0 */ -@Configuration +@Component public class WebFluxFilter implements WebFilter { public static final String SESSION_USER = "SESSION_USER"; + public static final String PAGE_LOGIN = "/wg/route/login.html"; + + private List unPassPathPatterns = Arrays.asList(new PathPattern[]{ + new PathPatternParser().parse("/wg/api/user/**"), + new PathPatternParser().parse("/wg/api/route/**"), + new PathPatternParser().parse("/wg/route/user/**"), + new PathPatternParser().parse("/wg/route/route/**"), + }); @Override public Mono filter(ServerWebExchange serverWebExchange, WebFilterChain webFilterChain) { - serverWebExchange.getSession().filter(webSession -> webSession.getAttributes().get(SESSION_USER) == null).then(); - serverWebExchange.getRequest().mutate().path("").build(); - return webFilterChain.filter(serverWebExchange); + if (this.isUnPass(serverWebExchange)) { + return webFilterChain.filter(serverWebExchange); + } + return serverWebExchange.getSession().flatMap(webSession -> { + if (this.isLogin(webSession)) { + return webFilterChain.filter(serverWebExchange); + } + serverWebExchange.getResponse().setStatusCode(HttpStatus.FOUND); + HttpHeaders headers = serverWebExchange.getResponse().getHeaders(); + headers.setLocation(URI.create(PAGE_LOGIN)); + return serverWebExchange.getResponse().setComplete(); + }); + } + + /** + * 是否不校验登录 + * + * @param serverWebExchange + * @return + */ + private boolean isUnPass(ServerWebExchange serverWebExchange) { + return unPassPathPatterns.stream().allMatch(pathPattern -> pathPattern.matches(serverWebExchange.getRequest().getPath())); + } + + /** + * 是否登录 + * + * @param webSession + * @return + */ + private boolean isLogin(WebSession webSession) { + return webSession.getAttributes().get(SESSION_USER) != null; } } diff --git a/src/main/java/ink/wgink/gateway/handler/sign/SignHandler.java b/src/main/java/ink/wgink/gateway/handler/sign/SignHandler.java new file mode 100644 index 0000000..aacab7d --- /dev/null +++ b/src/main/java/ink/wgink/gateway/handler/sign/SignHandler.java @@ -0,0 +1,26 @@ +package ink.wgink.gateway.handler.sign; + +import ink.wgink.gateway.handler.BaseHandler; +import org.springframework.stereotype.Service; +import org.springframework.web.reactive.function.server.ServerRequest; +import org.springframework.web.reactive.function.server.ServerResponse; +import reactor.core.publisher.Mono; + +/** + * When you feel like quitting. Think about why you started + * 当你想要放弃的时候,想想当初你为何开始 + * + * @ClassName: SignHandler + * @Description: 登录登出 + * @Author: wanggeng + * @Date: 2021/4/23 12:30 下午 + * @Version: 1.0 + */ +@Service +public class SignHandler extends BaseHandler { + + public Mono login(ServerRequest serverRequest) { + return null; + } + +}