当前位置: 首页 > 后端技术 > Java

Sa-Token注解鉴权:鉴权与业务代码优雅分离!

时间:2023-04-01 20:59:02 Java

Sa-Token简介:Sa-Token是一个轻量级的Java权限认证框架,主要解决登录认证、权限认证、Session会话、单点登录、OAuth2.0、微服务网关认证等一系列权限相关问题。今天主要介绍Sa-Token中的注解鉴权,它可以让我们:优雅地将鉴权与业务代码分离!GitHub开源地址:https://github.com/dromara/sa-token前期工作:1.首先我们在pom.xml中引入依赖:cn.dev33sa-token-spring-boot-starter1.26.02.注册Sa-Token注解拦截器/***Sa-Token配置类*/@ConfigurationpublicclassSaTokenConfigureimplementsWebMvcConfigurer{@OverridepublicvoidaddInterceptors(InterceptorRegistryregistry){registry.addInterceptor(newSaAnnotationInterceptor()).addPathPatterns("/**").excludePath;Patterns("")}}3。实现StpInterface接口,返回每个账号拥有的权限码集合/***自定义权限验证接口扩展*/@ComponentpublicclassStpInterfaceImplimplementsStpInterface{//返回一个账号拥有的权限码集合@OverridepublicListgetPermissionList(ObjectloginId,StringloginType){返回数组。asList("101","用户添加","用户删除","用户更新te","user-get","article-get");}//返回账户拥有的角色ID集合@OverridepublicListgetRoleList(ObjectloginId,StringloginType){returnArrays.asList("admin","super-admin");}}4.然后创建登录界面:/***Logintest*/@RestControllerpublicclassLoginController{//测试登录----http://localhost:8081/doLogin?name=zhang&pwd=123456@RequestMapping("doLogin")publicSaResultdoLogin(Stringname,Stringpwd){//这只是一个模拟例子,实际项目需要从数据库中查询数据进行比较if("zhang".equals(name)&&"123456".equals(pwd)){StpUtil.login(10001);returnSaResult.ok("登录成功");}returnSaResult.error("登录失败");}//测试logout----http://localhost:8081/logout@RequestMapping("logout")publicSaResultlogout(){StpUtil.logout();returnSaResult.ok();}}5.启动类@SpringBootApplication公共类SaTokenDemoApplication{publicstaticvoidmain(String[]args){SpringApplication.run(SaTokenDemoApplication.class,args);}}OK,前期工作完成,现在可以开始使用Sa-Token注解认证了!@SaCheckLogin:登录认证-登录后才能进入该方法@SaCheckRole("admin"):角色认证-必须有指定的角色ID才能进入该方法@SaCheckPermission("user:add"):权限认证-必须你只有指定权限才能进入该方法@SaCheckSafe:二次认证验证-二次认证后必须进入该方法@SaCheckBasic:HttpBasic认证-Basic认证通过后才能进入该方法登录认证:/***Notes认证测试*/@RestController@RequestMapping("/at/")publicclassAtController{//登录认证,登录后即可进入方法----http://localhost:8081/at/checkLogin@SaCheckLogin@RequestMapping("checkLogin")publicSaResultcheckLogin(){returnSaResult.ok();}}注意:可以在一个类上添加@SaCheckLogin注解,作用相当于标记该类的所有方法进行授权认证:@RestController@RequestMapping("/at/")publicclassAtController{//权限认证,只有user-add权限才能进入方法----http://localhost:8081/at/checkPermission@SaCheckPermission("user-add")@RequestMapping("checkPermission")publicSaResultcheckPermission(){returnSaResult。好的();}//权限认证,所有权限可以同时进入----http://localhost:8081/at/checkPermissionAnd@SaCheckPermission({"user-add","user-delete","user-update"})@RequestMapping("checkPermissionAnd")publicSaResultcheckPermissionAnd(){返回SaResult.ok();}//权限认证,只要有其中之一,就可以输入----http://localhost:8081/at/checkPermission或者@SaCheckPermission(value={"user-add","user-delete","user-update"},mode=SaMode.OR)@RequestMapping("checkPermissionOr")publicSaResultcheckPermissionOr(){returnSaResult.ok();}}角色认证:@RestController@RequestMapping("/at/")publicclassAtController{//角色认证,只有admin角色才能进入----http://localhost:8081/at/checkRole@SaCheckRole("admin")@RequestMapping("checkRole")publicSaResultcheckRole(){returnSaResult.ok();}}注意:@SaCheckRole类似于@SaCheckPermission,可以指定和|ormodeforsecondaryauthentication:@RestController@RequestMapping("/at/")publicclassAtController{//完成二级认证----http://localhost:8081/at/openSafe@RequestMapping("openSafe")publicSaResultopenSafe(){StpUtil.openSafe(200);//开启二级认证,200秒有效returnSaResult.ok();}//通过二级认证才能进入----http://localhost:8081/at/checkSafe@SaCheckSafe@RequestMapping("checkSafe")publicSaResultcheckSafe(){returnSaResult.ok();}}注意:必须先通过StpUtil.openSafe(200)二次认证,才能通过@SaCheckSafeHttpBasic认证的检查:@RestController@RequestMapping("/at/")publicclassAtController{//只有通过了基本认证可以输入----http://localhost:8081/at/checkBasic@SaCheckBasic(account="sa:123456")@RequestMapping("checkBasic")publicSaResultcheckBasic(){returnSaResult.ok();当我们访问这个接口时,浏览器会强制弹出一个表单:当我们输入账号密码(sa/123456)后,我们就可以继续访问数据了:总结通过上面的例子,我们可以看到注解Sa-Token的鉴权还是很强大的,可以帮助我们轻松灵活的完成鉴权。权利要求。参考资料开源地址:https://github.com/dromara/sa-token官方文档:https://sa-token.dev33.cn/