重构SSO模块

This commit is contained in:
click33
2021-08-16 02:12:02 +08:00
parent ef1bdbd867
commit 35814bbb66
19 changed files with 143 additions and 46 deletions

View File

@@ -16,6 +16,11 @@ public class SaReactorHolder {
*/
public static final Class<ServerWebExchange> CONTEXT_KEY = ServerWebExchange.class;
/**
* chain_key
*/
public static final String CHAIN_KEY = "WEB_FILTER_CHAIN_KEY";
/**
* 获取上下文对象
* @return see note

View File

@@ -151,6 +151,10 @@ public class SaReactorFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
// 写入WebFilterChain对象
exchange.getAttributes().put(SaReactorHolder.CHAIN_KEY, chain);
// ---------- 全局认证处理
try {
// 写入全局上下文 (同步)

View File

@@ -3,8 +3,12 @@ package cn.dev33.satoken.reactor.model;
import org.springframework.http.HttpCookie;
import org.springframework.http.server.reactive.ServerHttpRequest;
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilterChain;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.reactor.context.SaReactorHolder;
import cn.dev33.satoken.reactor.context.SaReactorSyncHolder;
/**
* Request for Reactor
@@ -85,4 +89,19 @@ public class SaRequestForReactor implements SaRequest {
public String getMethod() {
return request.getMethodValue();
}
/**
* 转发请求
*/
@Override
public Object forward(String path) {
ServerWebExchange exchange = SaReactorSyncHolder.getContent();
WebFilterChain chain = exchange.getAttribute(SaReactorHolder.CHAIN_KEY);
ServerHttpRequest newRequest = request.mutate().path(path).build();
ServerWebExchange newExchange = exchange.mutate().request(newRequest).build();
return chain.filter(newExchange);
}
}

View File

@@ -1,9 +1,15 @@
package cn.dev33.satoken.servlet.model;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import cn.dev33.satoken.SaManager;
import cn.dev33.satoken.context.model.SaRequest;
import cn.dev33.satoken.exception.SaTokenException;
/**
* Request for Servlet
@@ -89,4 +95,18 @@ public class SaRequestForServlet implements SaRequest {
return request.getMethod();
}
/**
* 转发请求
*/
@Override
public Object forward(String path) {
try {
HttpServletResponse response = (HttpServletResponse)SaManager.getSaTokenContext().getResponse().getSource();
request.getRequestDispatcher(path).forward(request, response);
return null;
} catch (ServletException | IOException e) {
throw new SaTokenException(e);
}
}
}

View File

@@ -1,8 +1,9 @@
package cn.dev33.satoken.solon.model;
import cn.dev33.satoken.context.model.SaRequest;
import org.noear.solon.core.handle.Context;
import cn.dev33.satoken.context.model.SaRequest;
/**
* @author noear
* @since 1.4
@@ -49,4 +50,5 @@ public class SaRequestForSolon implements SaRequest {
public String getMethod() {
return ctx.method();
}
}