mirror of
https://gitee.com/dromara/sa-token.git
synced 2025-08-24 16:18:38 +08:00
新增账户可用性注解及鉴权代码
This commit is contained in:
parent
153785880d
commit
d22f8f0ea9
@ -0,0 +1,24 @@
|
|||||||
|
package cn.dev33.satoken.annotation;
|
||||||
|
|
||||||
|
import java.lang.annotation.ElementType;
|
||||||
|
import java.lang.annotation.Retention;
|
||||||
|
import java.lang.annotation.RetentionPolicy;
|
||||||
|
import java.lang.annotation.Target;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 校验当前用户是否可用
|
||||||
|
*
|
||||||
|
* <p> 可标注在函数、类上(效果等同于标注在此类的所有方法上)
|
||||||
|
*
|
||||||
|
* @author videomonster
|
||||||
|
*/
|
||||||
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
|
@Target({ ElementType.METHOD, ElementType.TYPE })
|
||||||
|
public @interface SaCheckEnable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 多账号体系下所属的账号体系标识
|
||||||
|
* @return see note
|
||||||
|
*/
|
||||||
|
String type() default "";
|
||||||
|
}
|
@ -21,4 +21,9 @@ public @interface SaCheckLogin {
|
|||||||
*/
|
*/
|
||||||
String type() default "";
|
String type() default "";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 是否检查当前登陆账号是否禁用 (true: 检查 false: 不检查)
|
||||||
|
* @return see note
|
||||||
|
*/
|
||||||
|
String checkEnable() default "false";
|
||||||
}
|
}
|
||||||
|
@ -6,11 +6,7 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import cn.dev33.satoken.SaManager;
|
import cn.dev33.satoken.SaManager;
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
import cn.dev33.satoken.annotation.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckSafe;
|
|
||||||
import cn.dev33.satoken.annotation.SaMode;
|
|
||||||
import cn.dev33.satoken.config.SaCookieConfig;
|
import cn.dev33.satoken.config.SaCookieConfig;
|
||||||
import cn.dev33.satoken.config.SaTokenConfig;
|
import cn.dev33.satoken.config.SaTokenConfig;
|
||||||
import cn.dev33.satoken.context.SaHolder;
|
import cn.dev33.satoken.context.SaHolder;
|
||||||
@ -1606,6 +1602,10 @@ public class StpLogic {
|
|||||||
*/
|
*/
|
||||||
public void checkByAnnotation(SaCheckLogin at) {
|
public void checkByAnnotation(SaCheckLogin at) {
|
||||||
this.checkLogin();
|
this.checkLogin();
|
||||||
|
Object loginId = getLoginId();
|
||||||
|
if ("true".equalsIgnoreCase(at.checkEnable().trim()) && isDisable(loginId)) {
|
||||||
|
throw new DisableLoginException(getLoginType(), loginId, getDisableTime(loginId));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -1656,6 +1656,14 @@ public class StpLogic {
|
|||||||
this.checkSafe();
|
this.checkSafe();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 根据注解(@SaCheckEnable)鉴权
|
||||||
|
*
|
||||||
|
* @param at 注解对象
|
||||||
|
*/
|
||||||
|
public void checkByAnnotation(SaCheckEnable at) {
|
||||||
|
this.isDisable(getLoginId());
|
||||||
|
}
|
||||||
|
|
||||||
// ------------------- 账号封禁 -------------------
|
// ------------------- 账号封禁 -------------------
|
||||||
|
|
||||||
|
@ -10,12 +10,7 @@ import java.util.function.Consumer;
|
|||||||
import java.util.function.Function;
|
import java.util.function.Function;
|
||||||
|
|
||||||
import cn.dev33.satoken.SaManager;
|
import cn.dev33.satoken.SaManager;
|
||||||
import cn.dev33.satoken.annotation.SaCheckBasic;
|
import cn.dev33.satoken.annotation.*;
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckSafe;
|
|
||||||
import cn.dev33.satoken.annotation.SaIgnore;
|
|
||||||
import cn.dev33.satoken.basic.SaBasicUtil;
|
import cn.dev33.satoken.basic.SaBasicUtil;
|
||||||
import cn.dev33.satoken.session.SaSession;
|
import cn.dev33.satoken.session.SaSession;
|
||||||
import cn.dev33.satoken.util.SaFoxUtil;
|
import cn.dev33.satoken.util.SaFoxUtil;
|
||||||
@ -169,6 +164,11 @@ public final class SaStrategy {
|
|||||||
SaBasicUtil.check(checkBasic.realm(), checkBasic.account());
|
SaBasicUtil.check(checkBasic.realm(), checkBasic.account());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 校验 @SaCheckEable 注解
|
||||||
|
SaCheckEnable checkEable = (SaCheckEnable) SaStrategy.me.getAnnotation.apply(target, SaCheckEnable.class);
|
||||||
|
if(checkEable != null) {
|
||||||
|
SaManager.getStpLogic(checkEable.type()).checkByAnnotation(checkEable);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
- `@SaCheckSafe`: 二级认证校验 —— 必须二级认证之后才能进入该方法。
|
- `@SaCheckSafe`: 二级认证校验 —— 必须二级认证之后才能进入该方法。
|
||||||
- `@SaCheckBasic`: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法。
|
- `@SaCheckBasic`: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法。
|
||||||
- `@SaIgnore`:忽略认证 —— 表示被修饰的方法或类无需进行注解认证和路由拦截认证。
|
- `@SaIgnore`:忽略认证 —— 表示被修饰的方法或类无需进行注解认证和路由拦截认证。
|
||||||
|
- `@SaCheckEnable`:账户可用性校验 —— 校验当前操作账户是否可用, 也可以直接在`@SaCheckLogin`中设置参数`checkEnable="true""`即可完成登陆和账户可用性同事校验。
|
||||||
|
|
||||||
Sa-Token 使用全局拦截器完成注解鉴权功能,为了不为项目带来不必要的性能负担,拦截器默认处于关闭状态<br>
|
Sa-Token 使用全局拦截器完成注解鉴权功能,为了不为项目带来不必要的性能负担,拦截器默认处于关闭状态<br>
|
||||||
因此,为了使用注解鉴权,**你必须手动将 Sa-Token 的全局拦截器注册到你项目中**
|
因此,为了使用注解鉴权,**你必须手动将 Sa-Token 的全局拦截器注册到你项目中**
|
||||||
@ -49,6 +50,13 @@ public String info() {
|
|||||||
return "查询用户信息";
|
return "查询用户信息";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 登录认证加账户可用性认证:只有登录后, 并且账户可用才能进入该方法
|
||||||
|
@SaCheckLogin(checkEnable = "true")
|
||||||
|
@RequestMapping("info")
|
||||||
|
public String info() {
|
||||||
|
return "查询用户信息";
|
||||||
|
}
|
||||||
|
|
||||||
// 角色认证:必须具有指定角色才能进入该方法
|
// 角色认证:必须具有指定角色才能进入该方法
|
||||||
@SaCheckRole("super-admin")
|
@SaCheckRole("super-admin")
|
||||||
@RequestMapping("add")
|
@RequestMapping("add")
|
||||||
@ -76,6 +84,13 @@ public String add() {
|
|||||||
public String add() {
|
public String add() {
|
||||||
return "用户增加";
|
return "用户增加";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 账户可用性校验: 只有当前账户可用的情况下, 才能进入方法
|
||||||
|
@SaCheckEnable
|
||||||
|
@RequestMapping("info")
|
||||||
|
public String info() {
|
||||||
|
return "查询用户信息";
|
||||||
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
注:以上注解都可以加在类上,代表为这个类所有方法进行鉴权
|
注:以上注解都可以加在类上,代表为这个类所有方法进行鉴权
|
||||||
|
@ -1,16 +1,12 @@
|
|||||||
package cn.dev33.satoken.solon;
|
package cn.dev33.satoken.solon;
|
||||||
|
|
||||||
|
import cn.dev33.satoken.annotation.*;
|
||||||
import org.noear.solon.Solon;
|
import org.noear.solon.Solon;
|
||||||
import org.noear.solon.core.AopContext;
|
import org.noear.solon.core.AopContext;
|
||||||
import org.noear.solon.core.Plugin;
|
import org.noear.solon.core.Plugin;
|
||||||
import org.noear.solon.core.event.EventBus;
|
import org.noear.solon.core.event.EventBus;
|
||||||
|
|
||||||
import cn.dev33.satoken.SaManager;
|
import cn.dev33.satoken.SaManager;
|
||||||
import cn.dev33.satoken.annotation.SaCheckBasic;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckLogin;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckRole;
|
|
||||||
import cn.dev33.satoken.annotation.SaCheckSafe;
|
|
||||||
import cn.dev33.satoken.basic.SaBasicTemplate;
|
import cn.dev33.satoken.basic.SaBasicTemplate;
|
||||||
import cn.dev33.satoken.basic.SaBasicUtil;
|
import cn.dev33.satoken.basic.SaBasicUtil;
|
||||||
import cn.dev33.satoken.config.SaTokenConfig;
|
import cn.dev33.satoken.config.SaTokenConfig;
|
||||||
@ -42,6 +38,7 @@ public class XPluginImp implements Plugin {
|
|||||||
context.beanAroundAdd(SaCheckLogin.class, SaTokenAnnotationInterceptor.INSTANCE);
|
context.beanAroundAdd(SaCheckLogin.class, SaTokenAnnotationInterceptor.INSTANCE);
|
||||||
context.beanAroundAdd(SaCheckSafe.class, SaTokenAnnotationInterceptor.INSTANCE);
|
context.beanAroundAdd(SaCheckSafe.class, SaTokenAnnotationInterceptor.INSTANCE);
|
||||||
context.beanAroundAdd(SaCheckBasic.class, SaTokenAnnotationInterceptor.INSTANCE);
|
context.beanAroundAdd(SaCheckBasic.class, SaTokenAnnotationInterceptor.INSTANCE);
|
||||||
|
context.beanAroundAdd(SaCheckEnable.class, SaTokenAnnotationInterceptor.INSTANCE);
|
||||||
|
|
||||||
//集成初始化
|
//集成初始化
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user