mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-04-05 17:37:53 +08:00
feat: 插件钩子函数的注册支持连缀风格调用
This commit is contained in:
parent
d65881b59a
commit
a97e3f9902
sa-token-core/src/main/java/cn/dev33/satoken/plugin
sa-token-demo/sa-token-demo-test/src/main/java/com/pj/satoken
@ -138,7 +138,7 @@ public class SaTokenPluginHolder {
|
||||
* 安装指定插件
|
||||
* @param plugin /
|
||||
*/
|
||||
public synchronized void installPlugin(SaTokenPlugin plugin) {
|
||||
public synchronized SaTokenPluginHolder installPlugin(SaTokenPlugin plugin) {
|
||||
|
||||
// 插件为空,拒绝安装
|
||||
if (plugin == null) {
|
||||
@ -161,16 +161,19 @@ public class SaTokenPluginHolder {
|
||||
|
||||
// 添加到插件集合
|
||||
pluginList.add(plugin);
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 安装指定插件,根据插件类型
|
||||
* @param pluginClass /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void installPlugin(Class<T> pluginClass) {
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder installPlugin(Class<T> pluginClass) {
|
||||
try {
|
||||
T plugin = pluginClass.getDeclaredConstructor().newInstance();
|
||||
installPlugin(plugin);
|
||||
return installPlugin(plugin);
|
||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
||||
throw new SaTokenPluginException(e);
|
||||
}
|
||||
@ -192,7 +195,7 @@ public class SaTokenPluginHolder {
|
||||
* @param executeFunction /
|
||||
* @param <T> /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void onBeforeInstall(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder onBeforeInstall(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
// 如果指定的插件已经安装完毕,则不再允许注册前置钩子函数
|
||||
if(isInstalledPlugin(listenerClass)) {
|
||||
throw new SaTokenPluginException("插件 [ " + listenerClass.getCanonicalName() + " ] 已安装完毕,不允许再注册前置钩子函数");
|
||||
@ -200,6 +203,9 @@ public class SaTokenPluginHolder {
|
||||
|
||||
// 堆积到钩子函数集合
|
||||
beforeInstallHooks.add(new SaTokenPluginHookModel<T>(listenerClass, executeFunction));
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -208,15 +214,18 @@ public class SaTokenPluginHolder {
|
||||
* @param executeFunction /
|
||||
* @param <T> /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void onAfterInstall(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder onAfterInstall(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
// 如果指定的插件已经安装完毕,则立即执行该钩子函数
|
||||
if(isInstalledPlugin(listenerClass)) {
|
||||
executeFunction.execute(getPlugin(listenerClass));
|
||||
return;
|
||||
return this;
|
||||
}
|
||||
|
||||
// 堆积到钩子函数集合
|
||||
afterInstallHooks.add(new SaTokenPluginHookModel<T>(listenerClass, executeFunction));
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
@ -226,7 +235,7 @@ public class SaTokenPluginHolder {
|
||||
* 卸载指定插件
|
||||
* @param plugin /
|
||||
*/
|
||||
public synchronized void destroyPlugin(SaTokenPlugin plugin) {
|
||||
public synchronized SaTokenPluginHolder destroyPlugin(SaTokenPlugin plugin) {
|
||||
|
||||
// 插件为空,拒绝卸载
|
||||
if (plugin == null) {
|
||||
@ -246,14 +255,17 @@ public class SaTokenPluginHolder {
|
||||
|
||||
// 执行该插件的 destroy 后置钩子
|
||||
_consumeHooks(afterDestroyHooks, plugin.getClass());
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
* 卸载指定插件,根据插件类型
|
||||
* @param pluginClass /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void destroyPlugin(Class<T> pluginClass) {
|
||||
destroyPlugin(getPlugin(pluginClass));
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder destroyPlugin(Class<T> pluginClass) {
|
||||
return destroyPlugin(getPlugin(pluginClass));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -272,8 +284,11 @@ public class SaTokenPluginHolder {
|
||||
* @param executeFunction /
|
||||
* @param <T> /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void onBeforeDestroy(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder onBeforeDestroy(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
beforeDestroyHooks.add(new SaTokenPluginHookModel<T>(listenerClass, executeFunction));
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -282,8 +297,11 @@ public class SaTokenPluginHolder {
|
||||
* @param executeFunction /
|
||||
* @param <T> /
|
||||
*/
|
||||
public synchronized<T extends SaTokenPlugin> void onAfterDestroy(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
public synchronized<T extends SaTokenPlugin> SaTokenPluginHolder onAfterDestroy(Class<T> listenerClass, SaTokenPluginHookFunction<T> executeFunction) {
|
||||
afterDestroyHooks.add(new SaTokenPluginHookModel<T>(listenerClass, executeFunction));
|
||||
|
||||
// 返回对象自身,支持连缀风格调用
|
||||
return this;
|
||||
}
|
||||
|
||||
|
||||
|
@ -91,19 +91,22 @@ public class SaTokenConfigure implements WebMvcConfigurer {
|
||||
*/
|
||||
@Bean
|
||||
public SaTokenPluginHolder getSaTokenPluginHolder() {
|
||||
System.out.println("自定义逻辑");
|
||||
SaTokenPluginHolder.instance.onBeforeInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("自定义逻辑前置");
|
||||
});
|
||||
System.out.println("自定义插件安装钩子函数...");
|
||||
|
||||
SaTokenPluginHolder.instance.onAfterInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("自定义逻辑后");
|
||||
});
|
||||
SaTokenPluginHolder.instance.onAfterInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("自定义逻辑后置2");
|
||||
});
|
||||
return SaTokenPluginHolder.instance
|
||||
.onBeforeInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("SaTokenPluginForJackson 插件安装前置钩子...");
|
||||
})
|
||||
|
||||
return SaTokenPluginHolder.instance;
|
||||
.onAfterInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("SaTokenPluginForJackson 插件安装后置钩子...");
|
||||
})
|
||||
|
||||
.onAfterInstall(SaTokenPluginForJackson.class, plugin -> {
|
||||
System.out.println("SaTokenPluginForJackson 插件安装后置钩子2...");
|
||||
})
|
||||
|
||||
;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user