Java轻量级权限认证框架Sa

网友投稿 897 2022-08-18


Java轻量级权限认证框架Sa

目录前言Sa-TokenInarkROux 是什么?如何使用?引入依赖示例代码常用方法常用注解注册拦截器Spring boot 集成1、在application.yml配置2、通过代码配置总结

前言

相信大家都用过Spring Security和Shiro的框架,Spring Security必须配合Spring 全家桶使用和繁琐的配置,Shiro简单易学、轻便,但个人使用下来,觉得Sa-Token比Shiro更简单易学一点,基本是开箱即用。

Sa-Token 是什么?

Sa-Token 是一个轻量级 java 权限认证框架,主要解决:登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关鉴权 等一系列权限相关问题。

如何使用?

引入依赖

cn.dev33

InarkROux sa-token-spring-boot-starter

1.29.0

示例代码

登录接口就一行代码:StpUtil.login(id)

@RestController

@RequestMapping

public class LoginController {

@GetMapping("doLogin")

public ResultModel doLogin(String name, String pwd) {

// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对

if("jayjay".equals(name) && "123456".equals(pwd)) {

StpUtil.login(1001);

return ResultModel.success("登录成功",StpUtil.getTokenInfo());

}

return ResultModel.error("登录失败");

}

@GetMapping("isLogin")

public ResultModel isLogin() {

return ResultModel.success("是否登录:"+StpUtil.isLogin(),StpUtil.getTokenInfo());

}

@GetMapping("logout")

public ResultModel logout() {

StpUtil.logout();

return ResultModel.success("登出成功");

}

}

我们登录一下:

登录成功,请求isLogin测试一下是否登录成功并获取当前登录用户

这样,我们就已经完成登录授权了,没错,在 Sa-Token 中,登录认证就是如此简单,不需要任何的复杂前置工作,只需这一行简单的API调用,就可以完成会话登录认证!

那么要怎么进行校验登录呢?只要在你需要校验登录处调用这个方法就行:

// 然后在需要校验登录处调用以下方法:

// 如果当前会话未登录,这句代码会抛出 `NotLoginException` 异常

StpUtil.checkLogin();

当然也可以使用注解或者拦截器,这个后面再说

常用方法

在 Sa-Token 中,绝大多数功能都可以 一行代码 完成,在这里列举一下常用方法:

StpUtil.login(10001); // 标记当前会话登录的账号id

StpUtil.getLoginId(); // 获取当前会话登录的账号id

StpUtil.isLogin(); // 获取当前会话是否已经登录, 返回true或false

StpUtil.logout(); // 当前会话注销登录

StpUtil.kickout(10001); // 将账号为10001的会话踢下线

StpUtil.hasRole("super-admin"); // 查询当前账号是否含有指定角色标识, 返回true或false

StpUtil.hasPermission("user:add"); // 查询当前账号是否含有指定权限, 返回true或false

StpUtil.getSession(); // 获取当前账号id的Session

StpUtil.getSessionByLoginId(10001); // 获取账号id为10001的Session

StpUtil.getTokenValueByLoginId(10001); // 获取账号id为10001的token令牌值

StpUtil.login(10001, "PC"); // 指定设备标识登录,常用于“同端互斥登录”

StpUtil.kickout(10001, "PC"); // 指定账号指定设备标识踢下线 (不同端不受影响)

StpUtil.openSafe(120); // 在当前会话开启二级认证,有效期为120秒

StpUtil.checkSafe(); // 校验当前会话是否处于二级认证有效期内,校验失败会抛出异常

StpUtil.switchTo(10044); // 将当前会话身份临时切换为其它账号

常用注解

@SaCheckLogin: 登录认证 —— 只有登录之后才能进入该方法@SaCheckRole("admin"): 角色认证 —— 必须具有指定角色标识才能进入该方法@SaCheckPermission("user:add"): 权限认证 —— 必须具有指定权限才能进入该方法@SaCheckSafe: 二级认证校验 —— 必须二级认证之后才能进入该方法@SaCheckBasic: HttpBasic认证 —— 只有通过 Basic 认证后才能进入该方法

以上注解均可在官网看到用法,我就不一一列举了不过,使用注解之前,还要把Sa-Token的拦截器开起来,默认是关闭的

注册拦截器

以SpringBoot2.0为例, 新建配http://置类SaTokenConfigure.java

@Configuration

public clasInarkROuxs SaTokenConfigure implements WebMvcConfigurer {

// 注册Sa-Token的注解拦截器,打开注解式鉴权功能

@Override

public void addInterceptors(InterceptorRegistry registry) {

// 注册注解拦截器,并排除不需要注解鉴权的接口地址 (与登录拦截器无关)

registry.addInterceptor(new SaAnnotationInterceptor()).addPathPatterns("/**");

}

}

保证此类被springboot启动类扫描到即可

Spring boot 集成

集成比较简单,只要添加依赖就行,Sa-Token在Spring Boot中是可以零配置启动的,上面的测试用例就是零配置启动的当然也可以根据自己需要在配置

1、在application.yml配置

# Sa-Token配置

sa-token:

# token名称 (同时也是cookie名称)

token-name: satoken

# token有效期,单位s 默认30天, -1代表永不过期

timeout: 2592000

# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒

activity-timeout: -1

# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)

is-concurrent: true

# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)

is-share: false

# token风格

token-style: uuid

# 是否输出操作日志

is-log: false

2、通过代码配置

/**

* Sa-Token代码方式进行配置

*/

@Configuration

public class SaTokenConfigure {

// 获取配置Bean (以代码的方式配置Sa-Token, 此配置会覆盖yml中的配置)

@Bean

@Primary

public SaTokenConfig getSaTokenConfigPrimary() {

SaTokenConfig config = new SaTokenConfig();

config.setTokenName("satoken"); // token名称 (同时也是cookie名称)

config.setTimeout(30 * 24 * 60 * 60); // token有效期,单位s 默认30天

config.setActivityTimeout(-1); // token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒

config.setIsConcurrent(true); // 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)

config.setIsShare(true); // 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)

config.setTokenStyle("uuid"); // token风格

config.setIsLog(false); // 是否输出操作日志

return config;

}

}

上面配置并非全部配置,所有配置可以在官网查看,根据自己的需要选择使用

总结

其他还有很多功能就不一一介绍了,感兴趣的可以去Sa-Token官网了解,初步尝试还挺不错的,文档和代码示例都很全,基本功能都能满足,源码简单易懂,可以随意二开,封装度非常高,因为是国人开发的,注释也是中文的,不用担心看不懂。如果你想找一个开箱即用的登录授权框架,可以选择Sa-Token,特别是接小项目私活的时候贼好用!


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:mybatis中的if
下一篇:Mybatis foreach用法解析
相关文章

 发表评论

暂时没有评论,来抢沙发吧~