LoopAuth一款低侵入、精简、轻量、细粒度的Java Web权限治理框架
目前蕴含如下性能:
- 注解鉴权
- 代码鉴权
- 登录性能
- 有/无状态登录
- Redis登录业务存储拆散
后续拓展打算(依照开发顺序排列):
- ABAC权限拓展
- 微服务反对
- 账户危险监控
官网地址:
- Gitee
- GitHub
- 官网文档
上手试试
增加依赖
<!-- LoopAuth的Springboot插件 --><dependency> <groupId>com.sobercoding</groupId> <artifactId>LoopAuth-spring-boot-starter</artifactId> <version>1.0.2</version></dependency>
配置文件
疾速体验能够无需配置yml
文件,实现其余配置间接启动即可
- 登录规定及长久层的配置须要开启
token-persistence
配置项 access-modes
为从申请获取token
的地位,同时登录胜利或登录续期操作也会被动返回token
到HEADER
或COOKIE
中
loop-auth: time-out: 5 # token无效工夫(单位秒) 默认24小时 token-persistence: true # token长久化配置 默认false token-name: token # token名称 同时也作为 默认LoopAuth mutualism: true # token共生 默认false 开启则 账号能够同时在线 exclusion: true # 互斥登录, 默认false 开启则 多人操作雷同设施登录 会相互挤掉线(只有在 mutualism=true 时此配置才无效) max-login-count: 3 # 同一账号最大登录数量 默认1 -1代表不限度 renew: false # 主动续签 默认true 每次isLogin操作,会主动刷新token有效期 access-modes: # token获取形式 默认[COOKIE,HEADER]程序获取。即COOKIE中获取到鉴权胜利,则不返回HEADER获取 - HEADER - COOKIE secret-key: secret # 默认LoopAuth Token生成密钥 token-persistence-prefix: tokenPrefix # 默认LoopAuthToken token长久层存储的前缀 login-id-persistence-prefix: loginIdPrefix # 默认LoopAuthLoginId LoginId长久层存储的前缀 cookie-config: # cookie配置 remember: true # 是否短暂无效 默认false 开启则cookie的无效工夫为time-out,敞开则网页敞开后cookie失落 domain: localhost # 域 默认服务端域 path: /test # 默认'/' 门路 http-only: true # 默认false 是否容许js操作 secure: true # 默认false 是否只在https平安协定传输 # 安全等级 Strict (齐全禁止第三方Cookie,跨站点时,任何状况下都不会发送Cookie) # Lax 不发送第三方 Cookie,然而导航到指标网址的 Get 申请除外 # None 不限度 默认参数 same-site: Strict
简略应用
- 新建
Controller
类
@RestControllerpublic class DemoController { @GetMapping("/login") public String register(){ // 登录办法 LoopAuthFaceImpl.login("1"); return "登录胜利"; } @GetMapping("/islogin") public String isLogin(){ // 验证是否登录 LoopAuthFaceImpl.isLogin(); return "曾经登录"; } @GetMapping("/out") public String loginOut(){ // 验证是否登录 LoopAuthFaceImpl.isLogin(); // 登记登录 LoopAuthFaceImpl.logout(); return "登记胜利"; }}
鉴权Or登录验证
实现PermissionInterface
接口
- 要实现角色/权限代码的鉴权,就须要获取以后登录账户的角色列表、权限代码列表
- 须要手动实现
PermissionInterface
接口并注入
public class PermissionInterfaceImpl implements PermissionInterface { @Override public Set<String> getPermissionSet(String userId, String loginType) { // 这里只做演示 所以写死 依据业务查询数据库或者其余操作 return new HashSet<String>() { { add("user-*"); } }; } @Override public Set<String> getRoleSet(String userId, String loginType) { // 这里只做演示 所以写死 依据业务查询数据库或者其余操作 return new HashSet<String>() { { add("user"); } }; }}
主动注入
- 在
PermissionInterface
的实现类上加上@Component
注解即可
@Componentpublic class PermissionInterfaceImpl implements PermissionInterface { ...}
手动注入
- 保障我的项目启动时执行上面语句即可
LoopAuthStrategy.setPermissionInterface(new PermissionInterfaceImpl());
LoopAuthVerifyMode
LoopAuthVerifyMode
是一个枚举类,外面蕴含了OR
、AND
、NON
OR
代表或AND
代表与NON
代表非- 所有须要填写
LoopAuthVerifyMode
的办法,不填写则默认AND
代码鉴权
- 所有须要登录的办法都会外部默认先调用一次
LoopAuthFaceImpl.isLogin();
,即checkByRole
等办法应用时你无需手动调用isLogin
// 判断是否登录LoopAuthFaceImpl.isLogin();// 判断用户是否领有user角色LoopAuthFaceImpl.checkByRole("user")// 判断用户是否领有user-**或者order-get中权限代码LoopAuthFaceImpl.checkByPermission(LoopAuthVerifyMode.OR, "user-**","order-get")
注解鉴权
- 所有须要登录的办法都会默认执行
@LoopAutoCheckLogin
,即@LoopAuthPermission
上无需应用@LoopAutoCheckLogin
- 注解能够加在类上来防止反复工作
- 注解鉴权须要依赖拦截器
注入拦截器
@Componentpublic class LoopAuthMvcConfigure implements WebMvcConfigurer { /** * 注册LoopAuth 的拦截器,关上注解式鉴权性能 */ @Override public void addInterceptors(InterceptorRegistry registry) { // 注册注解拦截器 registry.addInterceptor(new LoopAuthAnnotationInterceptor()).addPathPatterns("/**"); }}
用注解拦挡
// 验证登录@LoopAutoCheckLogin// 判断用户是否领有user-**或者order-get中权限代码@LoopAuthPermission(value= {"user-**","order-get"},mode = LoopAuthVerifyMode.OR)@GetMapping("/testPermission")public String testPermission(){ return "检测胜利";}// 验证登录@LoopAutoCheckLogin// 判断用户是否领有user角色@LoopAuthRole(value="user")@GetMapping("/testRole")public String testRole(){ return "检测胜利";}