方法文档
注意:本页问题仅适用于1.1.0.RELEASE以前的版本,1.1.0.RELEASE之后的版本请前往1.1.0.RELEASE新概念页面进行学习,大部分内容还是使用,但是又部分修改。
KaSecurityAuthLogic
概述
KaSecurityAuthLogic
是一个用于定义安全验证逻辑的函数式接口。它提供了一些默认方法,以及一个静态工具方法用于执行权限验证逻辑。
接口定义
@FunctionalInterface
public interface KaSecurityAuthLogic {
default KaSecurityValidMessage doCheckLogin(Boolean onlyCheckLogin) {
// ...(默认方法,用于执行执行检查登录逻辑,如果只需要检查登录,那么就不会执行doAuth,注意,需要重写!)
}
KaSecurityValidMessage doAuth(List<String> roleList); // 进行角色判断的业务逻辑
default HttpServletRequest getRequest() {
// ...(默认方法,用于获取HttpServletRequest对象)
}
}
方法说明
doAuth(List<String> roleList)
该方法用于执行权限验证逻辑,接受一个角色列表作为参数,并返回一个 KaSecurityValidMessage
对象。
doCheckLogin(Boolean onlyCheckLogin)
默认方法,用于执行仅检查登录逻辑。如果 onlyCheckLogin
为 true
,则返回一个提示消息;否则,返回成功的消息。
allValid(KaSecurityValidMessage[] messages)
已废弃的方法,用于执行一组验证消息的逻辑。建议使用 ValidFilter
方法替代。
ValidFilter(KaSecurityAuthLogic kaSecurityAuthLogic, List<String> roleList, Boolean onlyCheckLogin)
静态方法,用于执行权限验证逻辑。首先执行 doCheckLogin
方法,然后根据返回结果决定是否继续执行 doAuth
方法。如果 doAuth
返回 onlyLogin
状态,则抛出异常。如果 doAuth
返回成功,则返回成功的消息。
getRequest()
默认方法,用于获取当前请求的 HttpServletRequest
对象。在 KaSecurityMode.GATEWAY
模式下,通过 RequestContextHolder
获取请求对象。若为该模式,会发出警告建议使用 KaSecurityAuthUtil
获取 Token,而不是直接使用请求对象。
KaToolSecurityAuthQueue
概述
KaToolSecurityAuthQueue
是一个简单的权限验证逻辑队列管理工具类。它提供了添加、获取、清空队列。
类定义
public class KaToolSecurityAuthQueue {
private static LinkedBlockingQueue<KaSecurityAuthLogic> list = new LinkedBlockingQueue<>();
public static void add(KaSecurityAuthLogic logic) {
// ...(添加逻辑到队列的方法)
}
public static KaSecurityAuthLogic get() {
// ...(从队列获取逻辑的方法)
}
public static void clear() {
// ...(清空队列的方法)
}
public static int size() {
// ...(获取队列大小的方法)
}
public static boolean isEmpty() {
// ...(检查队列是否为空的方法)
}
}
方法说明
add(KaSecurityAuthLogic logic)
将指定的 KaSecurityAuthLogic
对象添加到队列中。
get()
从队列中获取并移除一个 KaSecurityAuthLogic
对象。
clear()
清空队列中的所有 KaSecurityAuthLogic
对象。
size()
获取队列中的逻辑数量。
isEmpty()
检查队列是否为空。
KaSecurityAuthUtil
概述
KaSecurityAuthUtil
是一个用于处理安全认证相关操作的工具类。它提供了获取请求中的信息,如Payload、Token等的方法。本文档将介绍三个不同版本的 KaSecurityAuthUtil
类,它们分别实现了不同的接口,并在不同的场景中使用。
类定义
1. KaSecurityAuthUtil 实现 DefaultKaSecurityAuthUtilInterface 接口,SpringCloudGateWay使用
package cn.katool.security.starter.utils;
import cn.katool.security.starter.gateway.gateway.utils.RequestContextUtil;
import reactor.core.publisher.Mono;
public class KaSecurityAuthUtil<T> implements DefaultKaSecurityAuthUtilInterface<T> {
// ...(实现 DefaultKaSecurityAuthUtilInterface 接口的各种方法)
}
2. KaSecurityAuthUtil 实现 AbstractKaSecurityAuthUtil 接口,Zuul使用
package cn.katool.security.starter.utils;
import com.netflix.zuul.context.RequestContext;
import org.springframework.stereotype.Component;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@Component
public class KaSecurityAuthUtil<T> implements AbstractKaSecurityAuthUtil<T> {
// ...(实现 AbstractKaSecurityAuthUtil 接口的各种方法,并使用 Zuul)
}
3. KaSecurityAuthUtil 实现 AbstractKaSecurityAuthUtil 接口,各个服务/单体项目使用
package cn.katool.security.starter.utils;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class KaSecurityAuthUtil<T> implements AbstractKaSecurityAuthUtil<T> {
// ...(实现 AbstractKaSecurityAuthUtil 接口的各种方法)
}
方法说明
以下是 KaSecurityAuthUtil
类的一些主要方法(调用通过Dubbo获取记得在生产者进行Dubbo-SPI扩展):
getPayLoadWithHeader()
获取带有头部信息的 Payload。
getPayLoadWithDubboRPC()
获取通过Dubbo RPC传递的Payload。
getPayLoad()
获取Payload。
getTokenWithDubboRPC()
获取通过Dubbo RPC传递的Token。
getTokenWithHeader()
获取请求头中的Token。
getTokenWithHeader(String headerName)
获取指定请求头中的Token。
getTokenWithParameter(String parameterName)
获取指定请求参数中的Token。
getTokenWithCookie(String cookieName)
获取指定Cookie中的Token。
getTokenWithHeaderOrParameter(String headerName, String parameterName)
获取请求头或请求参数中的Token,优先使用请求头。
getRequest
获取请求上下文
getResponse
获取响应上下文
login(T payLoad)
一个登录函数,用于返回一个jwt,并放入请求头里面,这个方法SpringCloudGateWay没有实现
logout()
用于登出,登出后,该token会从redis中删除
kickout()
用于强制下线
在1.1.0之后,我们引入了TokenStatus,对token的状态进行查看,同时支持上下线管理,注意,在使用KaSecurityAuthUtil工具类时,尽量带上Class对象,否则可能会导致泛型擦除,最终转换为JsonObject对象,除此之外,在1.1.0之后,我们还有一系列的方法可以调用,比如直接判断是否登录,由于部分业务逻辑光是我们的判断可能还不够,所以我们仍然将判断登录的逻辑交给开发者来实现
使用示例
// 示例 1:使用 DefaultKaSecurityAuthUtilInterface 接口的 KaSecurityAuthUtil
KaSecurityAuthUtil<String> authUtil1 = new KaSecurityAuthUtil<>();
String payload1 = authUtil1.getPayLoadWithHeader();
String token1 = authUtil1.getTokenWithHeader();
// 示例 2:使用 AbstractKaSecurityAuthUtil 接口的 KaSecurityAuthUtil,并在 Zuul 中使用
KaSecurityAuthUtil<String> authUtil2 = new KaSecurityAuthUtil<>();
String payload2 = authUtil2.getPayLoadWithDubboRPC();
String token2 = authUtil2.getTokenWithCookie("authToken");
// 示例 3:使用 AbstractKaSecurityAuthUtil 接口的 KaSecurityAuthUtil
KaSecurityAuthUtil<String> authUtil3 = new KaSecurityAuthUtil<>();
String payload3 = authUtil3.getPayLoad();
String token3 = authUtil3.getTokenWithParameter("token");
以上示例展示了不同场景下如何使用 KaSecurityAuthUtil
类的实例进行安全认证相关的操作。用户可以根据实际需求选择适合的类版本并调用相应的方法。
AuthUtils
现在支持泛型了,更为智能