基于resty security的Api权限控制与事务支持的方法
发表于:2025-01-24 作者:千家信息网编辑
千家信息网最后更新 2025年01月24日,这篇文章主要介绍了基于resty security的Api权限控制与事务支持的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于resty security的Api权
千家信息网最后更新 2025年01月24日基于resty security的Api权限控制与事务支持的方法
这篇文章主要介绍了基于resty security的Api权限控制与事务支持的方法的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇基于resty security的Api权限控制与事务支持的方法文章都会有所收获,下面我们一起来看看吧。
让数据操作处于事务控制下
1. 在Appconfig里配置事务拦截器
public void configInterceptor(InterceptorLoader interceptorLoader) { //事务的拦截器 @Transaction interceptorLoader.add(new TransactionInterceptor());}
2. 在Resource的方法上使用Transaction注解配置事务
@API("/users")public class UserResource extends ApiResource { /** * 在一个数据源执行多个数据操作使用@Transaction注解 * 如果时多个数据源 使用 @Transaction(name={"ds1","ds2"}) * 数据源的名字和application.properties 里对应 */ @POST @Transaction public User save(User user,UserInfo info) { return user.save() && info.save(); }}
对Api进行权限控制
1. 设计权限数据结构
DROP TABLE IF EXISTS sec_user;CREATE TABLE sec_user ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL COMMENT '登录名', providername VARCHAR(50) NOT NULL COMMENT '提供者', email VARCHAR(200) COMMENT '邮箱', mobile VARCHAR(50) COMMENT '手机', password VARCHAR(200) NOT NULL COMMENT '密码', avatar_url VARCHAR(255) COMMENT '头像', first_name VARCHAR(10) COMMENT '名字', last_name VARCHAR(10) COMMENT '姓氏', full_name VARCHAR(20) COMMENT '全名', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='用户';DROP TABLE IF EXISTS sec_user_info;CREATE TABLE sec_user_info ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL COMMENT '用户id', creator_id BIGINT COMMENT '创建者id', gender INT DEFAULT 0 COMMENT '性别0男,1女', province_id BIGINT COMMENT '省id', city_id BIGINT COMMENT '市id', county_id BIGINT COMMENT '县id', street VARCHAR(500) COMMENT '街道', zip_code VARCHAR(50) COMMENT '邮编', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='用户信息';DROP TABLE IF EXISTS sec_role;CREATE TABLE sec_role ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL COMMENT '名称', value VARCHAR(50) NOT NULL COMMENT '值', intro VARCHAR(255) COMMENT '简介', pid BIGINT DEFAULT 0 COMMENT '父级id', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='角色';DROP TABLE IF EXISTS sec_user_role;CREATE TABLE sec_user_role ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, user_id BIGINT NOT NULL, role_id BIGINT NOT NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='用户角色';DROP TABLE IF EXISTS sec_permission;CREATE TABLE sec_permission ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL COMMENT '名称', method VARCHAR(10) NOT NULL COMMENT '方法', value VARCHAR(50) NOT NULL COMMENT '值', url VARCHAR(255) COMMENT 'url地址', intro VARCHAR(255) COMMENT '简介', pid BIGINT DEFAULT 0 COMMENT '父级id', created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL, updated_at TIMESTAMP NULL ON UPDATE CURRENT_TIMESTAMP, deleted_at TIMESTAMP NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='权限';DROP TABLE IF EXISTS sec_role_permission;CREATE TABLE sec_role_permission ( id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY, role_id BIGINT NOT NULL, permission_id BIGINT NOT NULL) ENGINE =InnoDB DEFAULT CHARSET =utf8 COMMENT ='角色权限';
2. 实现AuthenticateService权限数据加载接口
public class MyAuthenticateService implements AuthenticateService { /** * 查询用户信息 * @param username 登录的用户名 * @return 用户权限对象 */ public Principal getPrincipal(String username) { Principalprincipal=null; User u = User.dao.findBy("username=?", username); if (u != null) { principal = new Principal (u.getStr("username"), u.getStr("password"), new HashSet (u.getPermissions()), u); } return principal; } /** * 加载全部的权限信息 * @return 权限集合 */ public Set getAllCredentials() { List permissions = Permission.dao.findBy("deleted_at is null"); Set credentials = new HashSet (); for (Permission permission : permissions) { credentials.add(new Credential(permission.getStr("method"), permission.getStr("url"), permission.getStr("value"))); } return credentials; }}
3. 在AppConfig里配置SecurityInterceptor权限拦截器
public void configInterceptor(InterceptorLoader interceptorLoader) { //权限拦截器 2表示用户登录的最大session数量 MyAuthenticateService 数据加载实现类 interceptorLoader.add(new SecurityInterceptor(2, new MyAuthenticateService()));}
4. 模拟的用户数据
-- create role--INSERT INTO sec_role(name, value, intro, pid,created_at)VALUES ('超级管理员','R_ADMIN','',0, current_timestamp), ('销售','R_SALER','',1,current_timestamp), ('财务','R_FINANCER','',1,current_timestamp), ('设置','R_SETTER','',1,current_timestamp);-- create permission--INSERT INTO sec_permission( name,method, value, url, intro,pid, created_at)VALUES ('订单','*','P_ORDER','/api/v1.0/orders/**','订单访问权限',0,current_timestamp), ('销售','*','P_SALE','/api/v1.0/sales/**','销售访问权限',0,current_timestamp), ('财务','*','P_FINANCE','/api/v1.0/finances/**','财务访问权限',0,current_timestamp), ('仓库','*','P_STORE','/api/v1.0/stores/**','仓库访问权限',0,current_timestamp), ('设置','*','P_SETTING','/api/v1.0/settings/**','设置访问权限',0,current_timestamp);INSERT INTO sec_role_permission(role_id, permission_id)VALUES (1,1),(1,2),(1,3),(1,4),(1,5), (2,1),(2,2),(2,4), (3,1),(3,2),(3,3),(3,4), (4,5);-- user data---- create admin--INSERT INTO sec_user(username, providername, email, mobile, password, avatar_url, first_name, last_name, full_name, created_at)VALUES ('admin','dreampie','[email protected]','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁辉','王','仁辉·王',current_timestamp), ('saler','dreampie','[email protected]','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁辉','王','仁辉·王',current_timestamp), ('financer','dreampie','[email protected]','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁辉','王','仁辉·王',current_timestamp), ('setter','dreampie','[email protected]','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁辉','王','仁辉·王',current_timestamp);-- create user_info--INSERT INTO sec_user_info(user_id, creator_id, gender,province_id,city_id,county_id,street,created_at)VALUES (1,0,0,1,2,3,'人民大学',current_timestamp), (2,0,0,1,2,3,'人民大学',current_timestamp), (3,0,0,1,2,3,'人民大学',current_timestamp), (4,0,0,1,2,3,'人民大学',current_timestamp);-- create user_role--INSERT INTO sec_user_role( user_id, role_id)VALUES (1,1),(2,2),(3,3),(4,4);
关于"基于resty security的Api权限控制与事务支持的方法"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"基于resty security的Api权限控制与事务支持的方法"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
权限
数据
用户
事务
方法
控制
支持
人民
大学
人民大学
拦截器
信息
数据源
知识
角色
财务
登录
配置
销售
仓库
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
综合网络技术推广服务保障
网络安全环境治理内容
百单网互联网科技杭州照片
下一代电信网络安全平台
地方关于加强网络安全保护决定
银行业务软件开发怎么提升价值
苍南租房网络安全
rust飞机服务器怎么进
绥化市网络技术服务中心
湖南地区软件开发公司电话
康德软件开发有限公司怎么样
电商数据库费用
网络安全隐患时评
省级数字家庭管理平台服务器认证
徐州市贾汪区统计局数据库
全国网络安全监察部门报案
中国数据库发展史人物
武汉软件开发创业公司
考勤系统数据库的分析与设计
北方软件开发
地方关于加强网络安全保护决定
GJ数据库是什么
龙芯中科软件开发工作怎样
计算机网络技术问题大全
服务器锁定和管理怎么解决
台达850w电源 服务器
河南省政策法规数据库
防火墙网络安全案例
学生网络安全知识竞赛
游族网络 网络安全