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

java實現(xiàn)給某個文件或文件夾設置特定訪問權限

 更新時間:2025年05月25日 09:41:47   作者:Katie。  
這篇文章主要為大家詳細介紹了如何利用java實現(xiàn)給某個文件或文件夾設置特定訪問權限,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

一、項目背景詳細介紹

在當今信息化、云化和微服務架構迅猛發(fā)展的時代,數(shù)據(jù)安全和權限管理成為企業(yè)級應用和大型系統(tǒng)建設中的核心要素。文件系統(tǒng)作為最底層的數(shù)據(jù)存儲單元,承載著用戶文檔、日志、配置、資源文件等多種重要數(shù)據(jù),若文件或目錄的訪問權限無法得到精細化控制,一旦發(fā)生越權或者權限泄露,將會給企業(yè)帶來巨大的安全風險與法律合規(guī)壓力。

Java 作為跨平臺、高度成熟的應用開發(fā)語言,廣泛用于Web 后端、分布式計算、大數(shù)據(jù)處理、桌面應用等諸多領域。然而,Java 在早期版本中對底層文件系統(tǒng)權限的控制支持較為有限,多依賴操作系統(tǒng)命令或第三方本地庫來實現(xiàn)。直到 Java 7 引入了 java.nio.file 包及其屬性視圖(Attributes View)機制,才在純 Java 代碼層面提供了對 POSIX 權限(Linux/Unix)及 ACL 權限(Windows)的原生支持,極大地提升了跨平臺權限管理的便捷性和可移植性。

在用戶授權管理、企業(yè)文檔管理、分布式文件系統(tǒng)客戶端、自動化運維腳本、安全審計工具等場景中,經(jīng)常需要通過 Java 程序實現(xiàn)對文件或目錄權限的讀取、修改及校驗,以滿足不同角色、不同服務訪問資源的需求。掌握在 Java 中對文件或文件夾賦予特定訪問權限的技術,不僅能增強應用的安全性,還能減少運維復雜度,統(tǒng)一權限管理策略,并為高可用、高可靠性系統(tǒng)的建設提供強有力的底層支撐。

本項目旨在結合真實場景,從原理到代碼,從命令行工具到 API 庫,全面講解如何使用 Java 7+ 提供的 NIO.2 權限管理機制,實現(xiàn)跨平臺、可編程、可擴展的文件和目錄權限控制解決方案。文章內(nèi)容適合 Java 后端開發(fā)工程師、DevOps 運維工程師、安全架構師、系統(tǒng)管理員等人群閱讀和參考。

二、項目需求詳細介紹

為滿足上述場景需求,本項目需實現(xiàn)以下功能模塊與特性:

1.文件/目錄權限讀取

  • 能獲取指定路徑(文件或目錄)的基本屬性:所有者(owner)、所屬組(group)、權限位(讀/寫/執(zhí)行)等;
  • 在 Linux/Unix 平臺通過 POSIX 權限模型讀取讀(r)、寫(w)、執(zhí)行(x)權限;
  • 在 Windows 平臺通過 ACL(訪問控制列表)讀取各條 ACL 條目,包含用戶、組及其權限。

2.文件/目錄權限修改

  • 對指定文件或目錄的 POSIX 權限位進行設置,包括增加、刪除、替換讀寫執(zhí)行位;
  • 在 Windows 上為指定用戶或組添加/移除 ACL 條目,實現(xiàn)更靈活的訪問控制;
  • 支持遞歸修改目錄及其所有子文件夾/文件的權限。

3.跨平臺自動適配

  • 根據(jù) System.getProperty("os.name") 自動判斷 Windows 或類 Unix 系統(tǒng);
  • 在 Unix 上使用 PosixFileAttributeView、PosixFilePermissions;
  • 在 Windows 上使用 AclFileAttributeView、UserPrincipalLookupService、AclEntry。

4.命令行工具與程序化 API

  • 提供一個可執(zhí)行的命令行程序,可通過參數(shù)指定目標路徑、權限字符串、是否遞歸、語言(中/英)等;
  • 提供一套 Java 類庫,開發(fā)者可在代碼中直接調用權限設置接口。

5.異常處理與校驗

  • 在操作前檢測當前 Java 進程對目標路徑的寫權限,并提示或中止操作;
  • 捕獲常見異常,如路徑不存在、無權限、文件被占用等,并返回詳細錯誤信息;
  • 操作完成后再次讀取并校驗權限,確保修改生效。

6.日志與提示

  • 操作過程輸出 INFO、DEBUG、ERROR 級別日志,可配置日志輸出到控制臺或文件;
  • 命令行模式下支持中英文提示,友好引導用戶。

7.易擴展性

  • 代碼模塊化設計,未來可接入更多文件系統(tǒng)(如 Hadoop HDFS、CephFS 等);
  • 可擴展為批量管理工具或 Web 服務接口。

三、相關技術詳細介紹

為了實現(xiàn)跨平臺的文件/目錄權限管理,本節(jié)將介紹核心技術和 API。

3.1 Java NIO.2 屬性視圖(Attribute Views)

Java 7 引入的 NIO.2(即 java.nio.file 包)支持多種屬性視圖,用于讀取和修改文件系統(tǒng)元數(shù)據(jù):

BasicFileAttributeView:基礎屬性,如創(chuàng)建時間、修改時間、大??;

PosixFileAttributeView:POSIX 權限(僅在類 Unix 系統(tǒng));

AclFileAttributeView:ACL 權限(主要在 Windows);

DosFileAttributeView:DOS 屬性,如隱藏、只讀(Windows);

UserDefinedFileAttributeView:用戶自定義屬性。

3.2 POSIX 權限模型(類 Unix 系統(tǒng))

在類 Unix 系統(tǒng)中,文件和目錄具有三組權限位:owner、group、others,每組讀(r)、寫(w)、執(zhí)行(x)位。Java 用枚舉 PosixFilePermission 表示 9 位權限,通過 PosixFilePermissions.fromString("rwxr-x---") 和 Files.setPosixFilePermissions(path, perms) 實現(xiàn)設置。

3.3 ACL(Access Control List)模型(Windows)

ACL 是基于條目的訪問控制模型。每個條目(AclEntry)包含主體(用戶或組)、權限類型(讀取、寫入、執(zhí)行、刪除等)、和訪問類型(ALLOW 或 DENY)。使用 AclFileAttributeView.getAcl() 獲取當前 ACL 列表,view.setAcl(newAclList) 設置新的 ACL 列表。用戶主體通過 UserPrincipalLookupService.lookupPrincipalByName(username) 獲得。

3.4 Java 命令行解析

可使用 commons-cli 庫(Apache Commons CLI)或 JDK 自帶的 java.util.spi 簡易解析命令行參數(shù)。本文示例采用 Apache Commons CLI,方便定義選項和自動生成幫助信息。

3.5 日志系統(tǒng)

可使用 java.util.logging 或 SLF4J + Logback 進行日志管理。本文示例采用 SLF4J + Logback,支持級別控制、文件輸出和格式化。

四、實現(xiàn)思路詳細介紹

基于上述需求和技術選型,項目整體設計如下。

4.1 架構與模塊劃分

核心包 com.example.fsperm

  • PermissionManager:統(tǒng)一入口,封裝 POSIX 和 ACL 操作,根據(jù)平臺調用不同實現(xiàn);
  • PosixPermissionService:POSIX 實現(xiàn);
  • AclPermissionService:ACL 實現(xiàn);
  • FileUtils:公用工具,如遞歸遍歷、異常包裝、日志打??;
  • CommandLineApp:命令行程序入口;
  • CLIOptions:定義命令行參數(shù)規(guī)范;

依賴庫

  • Apache Commons CLI;
  • SLF4J + Logback。

4.2 主要流程

1.啟動程序/調用 API

2.路徑與參數(shù)校驗

  • 檢查路徑是否存在;
  • 檢測當前 Java 進程對目標路徑的寫權限;
  • 解析權限字符串(POSIX)或 ACL 參數(shù);

3.分發(fā)到平臺實現(xiàn)

  • Linux/Unix:調用 PosixPermissionService;
  • Windows:調用 AclPermissionService。

4.執(zhí)行權限設置

  • 單路徑或遞歸設置;
  • 捕獲并記錄異常;
  • 操作后再次讀取權限校驗;

5.輸出結果

  • 命令行模式:打印前后權限對比;
  • API 模式:返回結果對象或拋出異常。

4.3 關鍵點注意

POSIX 模式下設置目錄執(zhí)行位,否則無法進入子目錄;

Windows ACL 中,條目的先后順序影響最終權限;

避免對系統(tǒng)關鍵目錄進行遞歸操作;

權限校驗前后盡量減小時間窗口,防止并發(fā)修改。

五、完整實現(xiàn)代碼

// ================================================
// File: pom.xml - Maven 項目配置,包含依賴
// ================================================
/*
<project xmlns="http://maven.apache.org/POM/4.0.0" ...>
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.example</groupId>
  <artifactId>fs-perm-manager</artifactId>
  <version>1.0.0</version>
  <dependencies>
    <!-- Apache Commons CLI -->
    <dependency>
      <groupId>commons-cli</groupId>
      <artifactId>commons-cli</artifactId>
      <version>1.4</version>
    </dependency>
    <!-- SLF4J API -->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>1.7.36</version>
    </dependency>
    <!-- Logback -->
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.11</version>
    </dependency>
  </dependencies>
</project>
*/
 
// ================================================
// File: src/main/java/com/example/fsperm/PermissionManager.java
// ================================================
package com.example.fsperm;
 
import java.nio.file.Path;
import java.nio.file.Paths;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 * 統(tǒng)一權限管理入口,根據(jù)操作系統(tǒng)選擇POSIX或ACL實現(xiàn)
 */
public class PermissionManager {
    private static final Logger logger = LoggerFactory.getLogger(PermissionManager.class);
    private final FilePermissionService service;
 
    public PermissionManager() {
        String os = System.getProperty("os.name").toLowerCase();
        if (os.contains("win")) {
            service = new AclPermissionService();
            logger.info("使用Windows ACL權限服務");
        } else {
            service = new PosixPermissionService();
            logger.info("使用POSIX文件權限服務");
        }
    }
 
    /**
     * 設置單個路徑權限
     */
    public void setPermissions(String pathStr, String perms, boolean recursive) throws Exception {
        Path path = Paths.get(pathStr);
        FileUtils.checkWritePermission(path);
        if (recursive && FileUtils.isDirectory(path)) {
            FileUtils.walk(path, p -> {
                service.setPermissions(p, perms);
            });
        } else {
            service.setPermissions(path, perms);
        }
        FileUtils.verify(path, perms, recursive, service);
    }
 
    /**
     * 讀取權限并返回字符串
     */
    public String getPermissions(String pathStr) throws Exception {
        Path path = Paths.get(pathStr);
        return service.getPermissions(path);
    }
}
 
// ================================================
// File: src/main/java/com/example/fsperm/FilePermissionService.java
// ================================================
package com.example.fsperm;
 
import java.nio.file.Path;
 
/**
 * 文件權限操作接口
 */
public interface FilePermissionService {
    void setPermissions(Path path, String perms) throws Exception;
    String getPermissions(Path path) throws Exception;
}
 
// ================================================
// File: src/main/java/com/example/fsperm/PosixPermissionService.java
// ================================================
package com.example.fsperm;
 
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.attribute.PosixFilePermission;
import java.nio.file.attribute.PosixFilePermissions;
import java.util.Set;
 
/**
 * POSIX權限操作實現(xiàn)
 */
public class PosixPermissionService implements FilePermissionService {
    @Override
    public void setPermissions(Path path, String perms) throws Exception {
        Set<PosixFilePermission> posixPerms = PosixFilePermissions.fromString(perms);
        Files.setPosixFilePermissions(path, posixPerms);
    }
 
    @Override
    public String getPermissions(Path path) throws Exception {
        Set<PosixFilePermission> posixPerms = Files.getPosixFilePermissions(path);
        return PosixFilePermissions.toString(posixPerms);
    }
}
 
// ================================================
// File: src/main/java/com/example/fsperm/AclPermissionService.java
// ================================================
package com.example.fsperm;
 
import java.nio.file.Path;
import java.nio.file.Files;
import java.nio.file.attribute.AclEntry;
import java.nio.file.attribute.AclEntryType;
import java.nio.file.attribute.AclFileAttributeView;
import java.nio.file.attribute.UserPrincipal;
import java.nio.file.attribute.UserPrincipalLookupService;
import java.util.List;
 
/**
 * Windows ACL權限操作實現(xiàn)
 */
public class AclPermissionService implements FilePermissionService {
    @Override
    public void setPermissions(Path path, String perms) throws Exception {
        AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
        UserPrincipalLookupService lookup = path.getFileSystem().getUserPrincipalLookupService();
        // simplicity: perms 格式 "user:USERNAME:ALLOW:READ,WRITE"
        String[] parts = perms.split(":");
        String usr = parts[1], mode = parts[2], rights = parts[3];
        UserPrincipal principal = lookup.lookupPrincipalByName(usr);
        AclEntry.Builder builder = AclEntry.newBuilder();
        builder.setType(AclEntryType.valueOf(mode));
        builder.setPrincipal(principal);
        for (String r : rights.split(",")) {
            builder.setPermissions(AclEntryPermission.valueOf("FILE_" + r));
        }
        List<AclEntry> acl = view.getAcl();
        acl.add(0, builder.build());
        view.setAcl(acl);
    }
 
    @Override
    public String getPermissions(Path path) throws Exception {
        AclFileAttributeView view = Files.getFileAttributeView(path, AclFileAttributeView.class);
        return view.getAcl().toString();
    }
}
 
// ================================================
// File: src/main/java/com/example/fsperm/FileUtils.java
// ================================================
package com.example.fsperm;
 
import java.nio.file.*;
import java.util.function.Consumer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
/**
 * 公共工具類:權限校驗、遞歸遍歷、驗證
 */
public class FileUtils {
    private static final Logger logger = LoggerFactory.getLogger(FileUtils.class);
 
    public static void checkWritePermission(Path path) throws Exception {
        if (!Files.isWritable(path)) {
            throw new Exception("當前進程對路徑無寫權限:" + path);
        }
    }
 
    public static boolean isDirectory(Path path) {
        return Files.isDirectory(path);
    }
 
    public static void walk(Path path, Consumer<Path> consumer) throws Exception {
        Files.walk(path).forEach(consumer);
    }
 
    public static void verify(Path path, String perms, boolean recursive, FilePermissionService svc) throws Exception {
        if (recursive && isDirectory(path)) {
            walk(path, p -> {
                try {
                    String actual = svc.getPermissions(p);
                    logger.info("驗證權限:" + p + " => " + actual);
                } catch (Exception e) {
                    logger.error("驗證失敗:" + p, e);
                }
            });
        } else {
            String actual = svc.getPermissions(path);
            logger.info("驗證權限:" + path + " => " + actual);
        }
    }
}
 
// ================================================
// File: src/main/java/com/example/fsperm/CommandLineApp.java
// ================================================
package com.example.fsperm;
 
import org.apache.commons.cli.*;
 
/**
 * 命令行入口,支持參數(shù)解析和執(zhí)行
 */
public class CommandLineApp {
    public static void main(String[] args) {
        Options options = CLIOptions.build();
        try {
            CommandLine cmd = new DefaultParser().parse(options, args);
            if (cmd.hasOption("help")) {
                new HelpFormatter().printHelp("fs-perm-manager", options);
                return;
            }
            String path = cmd.getOptionValue("path");
            String perms = cmd.getOptionValue("perm");
            boolean recursive = cmd.hasOption("recursive");
            PermissionManager mgr = new PermissionManager();
            mgr.setPermissions(path, perms, recursive);
        } catch (Exception e) {
            System.err.println("操作失敗: " + e.getMessage());
            System.exit(1);
        }
    }
}
 
// ================================================
// File: src/main/java/com/example/fsperm/CLIOptions.java
// ================================================
package com.example.fsperm;
 
import org.apache.commons.cli.*;
 
/**
 * 定義命令行參數(shù)
 */
public class CLIOptions {
    public static Options build() {
        Options options = new Options();
        options.addOption("h", "help", false, "顯示幫助信息");
        options.addOption(Option.builder("p").longOpt("path").hasArg().argName("路徑").required().desc("文件或目錄路徑").build());
        options.addOption(Option.builder().longOpt("perm").hasArg().argName("權限").required().desc("權限參數(shù)").build());
        options.addOption("r", "recursive", false, "是否遞歸處理目錄");
        return options;
    }
}

六、代碼詳細解讀

PermissionManager:根據(jù)操作系統(tǒng)選擇 POSIX 或 ACL 服務,提供 setPermissions、getPermissions 等統(tǒng)一接口。

FilePermissionService 接口:定義權限設置和讀取方法,便于多實現(xiàn)擴展。

PosixPermissionService:利用 PosixFilePermissions 實現(xiàn) POSIX 權限字符串與實際權限的映射與設置。

AclPermissionService:利用 AclFileAttributeView 實現(xiàn) ACL 條目的構造和應用,用于 Windows 平臺。

FileUtils:封裝寫權限校驗、遞歸遍歷與設置后校驗等通用邏輯,并結合 SLF4J 日志輸出。

CommandLineApp:基于 Apache Commons CLI 解析命令行參數(shù),將操作委派給 PermissionManager 執(zhí)行。

CLIOptions:集中管理命令行參數(shù)定義,支持幫助信息自動生成。

七、項目詳細總結

本項目基于 Java NIO.2 引入的屬性視圖機制,提供一套跨平臺(Linux/Unix 與 Windows)文件與目錄權限管理解決方案。通過接口+多實現(xiàn)模式,結合命令行工具與可編程 API,滿足了讀取、修改、校驗、遞歸等多種使用場景。項目優(yōu)勢包括:

純 Java 實現(xiàn):無需依賴本地腳本或第三方本地庫,提升了可移植性。

跨平臺自動適配:自動檢測操作系統(tǒng)并調用相應權限服務,簡化部署。

擴展性好:新增 HDFS、CephFS 等文件系統(tǒng)支持只需實現(xiàn) FilePermissionService 接口。

日志與校驗:操作前后進行權限校驗并記錄詳細日志,提升可信度與可調試性。

八、項目常見問題及解答

Q1:Linux 上如何表示無執(zhí)行權限?

A:POSIX 權限字符串中,將執(zhí)行位字符 x 改為 -,如 rw-r--r--。

Q2:Windows 上如何移除已存在的 ACL 條目?

A:需要獲取當前 ACL 列表,遍歷查找匹配主體和權限的 AclEntry,調用 aclList.remove(entry),然后 setAcl 應用。

Q3:目錄遞歸時如何處理大目錄樹性能?

A:可使用多線程并行遍歷或限制最大并發(fā)任務數(shù),以提高效率。

Q4:權限修改失敗無報錯?

A:可能是 JVM 運行用戶缺少對應操作系統(tǒng)權限;需要以管理員或 root 身份運行。

九、擴展方向與性能優(yōu)化

異步與并行處理:利用 ForkJoinPool 或 ExecutorService 實現(xiàn)并發(fā)遞歸遍歷與權限設置,加快批量處理速度。

Web 管理界面:基于 Spring Boot 提供 REST 接口和前端頁面,實時監(jiān)控與管理文件權限。

集成分布式文件系統(tǒng):實現(xiàn) HDFS、CephFS、S3 等文件系統(tǒng)的權限控制適配層,統(tǒng)一調用接口管理異構存儲。

權限策略引擎:引入 Drools 等決策引擎,根據(jù)規(guī)則動態(tài)生成并下發(fā)權限策略,實現(xiàn)自動化合規(guī)管理。

安全審計與報告:增加操作審計模塊,記錄每次權限變更并生成周報、月報,滿足合規(guī)需求。

圖形可視化:通過圖表展示權限分布、異常統(tǒng)計等,提升運維體驗。

到此這篇關于java實現(xiàn)給某個文件或文件夾設置特定訪問權限的文章就介紹到這了,更多相關java設置訪問權限內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java中Arraylist的最大長度

    Java中Arraylist的最大長度

    這篇文章主要介紹了Java中Arraylist的最大長度,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • SpringBoot利用MDC機制過濾單次請求的所有日志

    SpringBoot利用MDC機制過濾單次請求的所有日志

    在服務出現(xiàn)故障時,我們經(jīng)常需要獲取一次請求流程里的所有日志進行定位 ,如何將一次數(shù)據(jù)上報請求中包含的所有業(yè)務日志快速過濾出來,就是本文要介紹的,需要的朋友可以參考下
    2024-04-04
  • Java 在PDF中添加騎縫章示例解析

    Java 在PDF中添加騎縫章示例解析

    這篇文章主要介紹了Java 在PDF中添加騎縫章示例解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • 使用多個servlet時Spring security需要指明路由匹配策略問題

    使用多個servlet時Spring security需要指明路由匹配策略問題

    這篇文章主要介紹了使用多個servlet時Spring security需要指明路由匹配策略問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java中的Hashtable源碼詳細解析

    Java中的Hashtable源碼詳細解析

    這篇文章主要介紹了Java中的Hashtable源碼詳細解析,Hashtable 的函數(shù)都是同步的,這意味著它是線程安全的,它的key、value都不可以為null,此外,Hashtable中的映射不是有序的,需要的朋友可以參考下
    2023-11-11
  • Eclipse maven項目lombok安裝配置圖解

    Eclipse maven項目lombok安裝配置圖解

    這篇文章主要介紹了Eclipse maven項目lombok安裝配置圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05
  • maven依賴包沖突SLF4J:?Class?path?contains?multiple?SLF4J?bindings處理方法

    maven依賴包沖突SLF4J:?Class?path?contains?multiple?SLF4J?bi

    這篇文章主要給大家介紹了關于maven依賴包沖突SLF4J:?Class?path?contains?multiple?SLF4J?bindings的處理方法,這個問題通常是因為項目中存在多個SLF4J的實現(xiàn)綁定(bindings)導致的沖突,需要的朋友可以參考下
    2024-02-02
  • Java類加載初始化的過程及順序

    Java類加載初始化的過程及順序

    今天小編就為大家分享一篇關于Java類加載初始化的過程及順序,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2018-12-12
  • SpringBoot整合Redis的實踐

    SpringBoot整合Redis的實踐

    Redis是一個高性能的內(nèi)存數(shù)據(jù)庫,支持多種數(shù)據(jù)結構和持久化機制,廣泛應用于緩存、會話存儲、排行榜等場景,SpringDataRedis是SpringFramework生態(tài)系統(tǒng)中用于簡化Redis開發(fā)的模塊,提供了對象映射、高級查詢、事務支持、Pub/Sub消息訂閱等功能
    2026-03-03
  • 基于常用json框架介紹和Jackson返回結果處理方式

    基于常用json框架介紹和Jackson返回結果處理方式

    這篇文章主要介紹了基于常用json框架介紹和Jackson返回結果處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論

华容县| 石嘴山市| 东乌珠穆沁旗| 青铜峡市| 陕西省| 宁陕县| 烟台市| 汉沽区| 将乐县| 鹤山市| 咸宁市| 洞口县| 濮阳市| 灵宝市| 炎陵县| 卢氏县| 余姚市| 孟州市| 漳州市| 台安县| 莫力| 贵州省| 登封市| 曲沃县| 新营市| 内江市| 铜山县| 体育| 自贡市| 荥经县| 河源市| 扎鲁特旗| 开阳县| 舟山市| 彭山县| 日照市| 宝山区| 陆河县| 广河县| 霍邱县| 石渠县|