最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于resty?security的Api權(quán)限控制與事務(wù)支持

 更新時(shí)間:2022年03月07日 14:39:46   作者:dreampie  
這篇文章主要為大家介紹了基于resty?security的Api權(quán)限控制與事務(wù)支持讓數(shù)據(jù)操作處于事務(wù)控制下,有需要的朋友可以借鑒參考下,希望能夠有所幫助

讓數(shù)據(jù)操作處于事務(wù)控制下

1. 在Appconfig里配置事務(wù)攔截器

public void configInterceptor(InterceptorLoader interceptorLoader) {
    //事務(wù)的攔截器 @Transaction
    interceptorLoader.add(new TransactionInterceptor());
}

2. 在Resource的方法上使用Transaction注解配置事務(wù)

@API("/users")
public class UserResource extends ApiResource {
  /**
   * 在一個(gè)數(shù)據(jù)源執(zhí)行多個(gè)數(shù)據(jù)操作使用@Transaction注解
   * 如果時(shí)多個(gè)數(shù)據(jù)源 使用 @Transaction(name={"ds1","ds2"})
   * 數(shù)據(jù)源的名字和application.properties 里對(duì)應(yīng)
   */
  @POST
  @Transaction
  public User save(User user,UserInfo info) {
    return user.save() && info.save();
  }
}

 對(duì)Api進(jìn)行權(quán)限控制

1. 設(shè)計(jì)權(quán)限數(shù)據(jù)結(jié)構(gòu)

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 '手機(jī)',
  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 '創(chuàng)建者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 '簡(jiǎn)介',
  pid        BIGINT DEFAULT 0 COMMENT '父級(jí)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 '簡(jiǎn)介',
  pid        BIGINT DEFAULT 0 COMMENT '父級(jí)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 ='權(quán)限';

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 ='角色權(quán)限';

2. 實(shí)現(xiàn)AuthenticateService權(quán)限數(shù)據(jù)加載接口

public class MyAuthenticateService implements AuthenticateService {
  /**
   * 查詢用戶信息  
   * @param username 登錄的用戶名
   * @return 用戶權(quán)限對(duì)象
   */
  public Principal getPrincipal(String username) {
    Principal<User> principal=null;
    User u = User.dao.findBy("username=?", username);
    if (u != null) {
      principal = new Principal<User>(u.getStr("username"), u.getStr("password"), new HashSet<String>(u.getPermissions()), u);
    }
    return principal;
  }
  /**
   * 加載全部的權(quán)限信息
   * @return 權(quán)限集合
   */
  public Set<Credential> getAllCredentials() {
    List<Permission> permissions = Permission.dao.findBy("deleted_at is null");
    Set<Credential> credentials = new HashSet<Credential>();

    for (Permission permission : permissions) {
      credentials.add(new Credential(permission.getStr("method"), permission.getStr("url"), permission.getStr("value")));
    }

    return credentials;
  }
}

3. 在AppConfig里配置SecurityInterceptor權(quán)限攔截器

public void configInterceptor(InterceptorLoader interceptorLoader) {
    //權(quán)限攔截器 2表示用戶登錄的最大session數(shù)量 MyAuthenticateService 數(shù)據(jù)加載實(shí)現(xiàn)類
    interceptorLoader.add(new SecurityInterceptor(2, new MyAuthenticateService()));
}

4. 模擬的用戶數(shù)據(jù)

-- create role--
INSERT INTO sec_role(name, value, intro, pid,created_at)
VALUES ('超級(jí)管理員','R_ADMIN','',0, current_timestamp),
       ('銷售','R_SALER','',1,current_timestamp),
       ('財(cái)務(wù)','R_FINANCER','',1,current_timestamp),
       ('設(shè)置','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/**','訂單訪問(wèn)權(quán)限',0,current_timestamp),
       ('銷售','*','P_SALE','/api/v1.0/sales/**','銷售訪問(wèn)權(quán)限',0,current_timestamp),
       ('財(cái)務(wù)','*','P_FINANCE','/api/v1.0/finances/**','財(cái)務(wù)訪問(wèn)權(quán)限',0,current_timestamp),
       ('倉(cāng)庫(kù)','*','P_STORE','/api/v1.0/stores/**','倉(cāng)庫(kù)訪問(wèn)權(quán)限',0,current_timestamp),
       ('設(shè)置','*','P_SETTING','/api/v1.0/settings/**','設(shè)置訪問(wèn)權(quán)限',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','<a  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"          target="_blank" >[email?protected]</a>','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁輝','王','仁輝·王',current_timestamp),
       ('saler','dreampie','<a  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"          target="_blank" >[email?protected]</a>','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁輝','王','仁輝·王',current_timestamp),
       ('financer','dreampie','<a  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"          target="_blank" >[email?protected]</a>','18611434500','a217d8ac340ee5da8098bff32a5769ebad5d4cfd74adebe6c7020db4dc4c3df517f56f6bc41882deb47814bd060db6f1e225219b095d7906d2115ba9e8ab80a0','','仁輝','王','仁輝·王',current_timestamp),
       ('setter','dreampie','<a  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"  rel="external nofollow"          target="_blank" >[email?protected]</a>','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,'人民大學(xué)',current_timestamp),
       (2,0,0,1,2,3,'人民大學(xué)',current_timestamp),
       (3,0,0,1,2,3,'人民大學(xué)',current_timestamp),
       (4,0,0,1,2,3,'人民大學(xué)',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權(quán)限控制與事務(wù)支持的詳細(xì)內(nèi)容,更多關(guān)于resty security的Api權(quán)限控制與事務(wù)支持的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot集成Liquibase的詳細(xì)步驟

    SpringBoot集成Liquibase的詳細(xì)步驟

    Liquibase 是一個(gè)強(qiáng)大的數(shù)據(jù)庫(kù)版本控制工具,能夠與 Spring Boot
    無(wú)縫集成,以簡(jiǎn)化數(shù)據(jù)庫(kù)遷移和管理的過(guò)程,以下是從開(kāi)始集成到最終運(yùn)行的詳細(xì)步驟,需要的朋友可以參考下
    2024-12-12
  • Java性能調(diào)優(yōu)及排查方式

    Java性能調(diào)優(yōu)及排查方式

    這篇文章主要介紹了Java性能調(diào)優(yōu)及排查方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • java中Map如何根據(jù)key的大小進(jìn)行排序詳解

    java中Map如何根據(jù)key的大小進(jìn)行排序詳解

    這篇文章主要給大家介紹了關(guān)于java中Map如何根據(jù)key的大小進(jìn)行排序的相關(guān)資料,有時(shí)候我們業(yè)務(wù)上需要對(duì)map里面的值按照key的大小來(lái)進(jìn)行排序的時(shí)候我們就可以利用如下方法來(lái)進(jìn)行排序了,需要的朋友可以參考下
    2023-09-09
  • Java JSch遠(yuǎn)程執(zhí)行Shell命令的方法

    Java JSch遠(yuǎn)程執(zhí)行Shell命令的方法

    本文主要介紹了Java JSch遠(yuǎn)程執(zhí)行Shell命令,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Java中的泛型詳細(xì)解析

    Java中的泛型詳細(xì)解析

    這篇文章主要介紹了Java中的泛型詳細(xì)解析,泛型又稱參數(shù)化類型,是JDK5.0出現(xiàn)的新特性,解決了數(shù)據(jù)類型的安全型問(wèn)題,Java泛型可以保證如果程序在編譯時(shí)沒(méi)用發(fā)出警告,運(yùn)行時(shí)就不會(huì)產(chǎn)生classCastException異常,需要的朋友可以參考下
    2024-01-01
  • LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法

    LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法

    這篇文章主要介紹了LeetCode -- Path Sum III分析及實(shí)現(xiàn)方法的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • java中String.matches方法使用

    java中String.matches方法使用

    String.matches()方法用于檢測(cè)字符串是否符合特定的正則表達(dá)式,詳細(xì)介紹了如何使用String.matches()配合不同的正則表達(dá)式來(lái)匹配各種特定格式的字符串,感興趣的可以了解一下
    2024-09-09
  • SpringCloud微服務(wù)的調(diào)用與遠(yuǎn)程調(diào)用測(cè)試示例

    SpringCloud微服務(wù)的調(diào)用與遠(yuǎn)程調(diào)用測(cè)試示例

    這篇文章主要介紹了SpringCloud微服務(wù)的調(diào)用與遠(yuǎn)程調(diào)用測(cè)試示例,服務(wù)調(diào)用者-可以暫時(shí)認(rèn)為是與用戶交互的角色(因?yàn)榇嬖谖⒎?wù)之間的調(diào)用),可以根據(jù)該用戶的類型將其賦予不同的服務(wù)調(diào)用權(quán)限,通過(guò)一次http請(qǐng)求訪問(wèn)調(diào)用對(duì)應(yīng)的微服務(wù)獲取想要的數(shù)據(jù)
    2023-04-04
  • java實(shí)現(xiàn)輸出任意整數(shù)的每一位

    java實(shí)現(xiàn)輸出任意整數(shù)的每一位

    這篇文章主要介紹了java實(shí)現(xiàn)輸出任意整數(shù)的每一位,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot打印詳細(xì)啟動(dòng)異常信息

    SpringBoot打印詳細(xì)啟動(dòng)異常信息

    這篇文章主要介紹了SpringBoot打印詳細(xì)啟動(dòng)異常信息,本文包含了詳細(xì)的過(guò)程解析與案例,概要的說(shuō)明了如何去使用打印啟動(dòng)異常信息,需要的朋友可以參考下
    2021-06-06

最新評(píng)論

安徽省| 三原县| 平江县| 永新县| 武穴市| 克拉玛依市| 萝北县| 藁城市| 正宁县| 宁夏| 双流县| 三明市| 石门县| 合山市| 瑞昌市| 宁夏| 汉寿县| 西和县| 博乐市| 治县。| 两当县| 应用必备| 柯坪县| 上犹县| 玛沁县| 兴宁市| 区。| 固原市| 光山县| 丽江市| 垣曲县| 阜新市| 交口县| 扶余县| 盘山县| 南宫市| 澄江县| 石棉县| 封开县| 桃园市| 阿城市|