管道基础大数据平台系统开发-【后端】-Server
1、修改所有Mapper的删除功能
2、用户添加批量修改密码功能
3、添加Java的GDAL操作类
已添加3个文件
已修改53个文件
1035 ■■■■ 文件已修改
data/db_fn.sql 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/db_tab.sql 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pom.xml 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/InitConfig.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/config/RestTemplateConfig.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/controller/sys/UserController.java 56 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/entity/all/SettingData.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/entity/ctrl/LayerDto.java 50 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/entity/ctrl/UserUpdateEntity.java 46 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/entity/sys/RoleEntity.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/helper/GdalHelper.java 380 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/helper/WebHelper.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/interceptor/AuthInterceptor.java 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/data/DictMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/data/DirMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/data/StyleMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/data/VerMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/AuthMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/DepMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/LoginMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/MenuMapper.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/OperateMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/ResMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/ResOpMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/RoleMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/TokenMapper.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/mapper/sys/UserMapper.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/service/sys/TokenService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/lf/server/service/sys/UserService.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/DictMapper.xml 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/DirMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/DownloadMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/MetaFileMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/MetaMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/StyleMapper.xml 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/data/VerMapper.xml 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/ArgsMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/AttachMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/AuthMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/BlacklistMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/DepMapper.xml 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/LoginMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/MenuAuthMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/MenuMapper.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/MsgMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/OperateMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/ResMapper.xml 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/ResOpMapper.xml 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/RoleMapper.xml 25 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/RoleMenuAuthMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/RoleResMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/RoleUserMapper.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/TokenMapper.xml 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/sys/UserMapper.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
说明.txt 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
data/db_fn.sql
@@ -192,7 +192,7 @@
select a.*,b.menuid,c.name from lf.sys_role_menu_auth a inner join lf.sys_menu_auth b on a.menu_auth_id = b.id
inner join lf.sys_auth c on b.authid = c.id where a.roleid = 1 and b.menuid = 1 order by c.id;
----------------------------------------------------------------------------------------------------- 
select * from lf.sys_user;
data/db_tab.sql
@@ -419,6 +419,7 @@
  depid integer default 1,
  name varchar(100),
  descr varchar(100),
  is_admin integer default 0,
  create_user integer default 1,
  create_time timestamp(6) without time zone default now(),
  update_user integer,
@@ -430,12 +431,13 @@
comment on column lf.sys_role.depid is '单位ID';
comment on column lf.sys_role.name is '名称';
comment on column lf.sys_role.descr is '描述';
comment on column lf.sys_role.is_admin is '是否为管理员:0-否,1-是';
comment on column lf.sys_role.create_user is '创建人ID';
comment on column lf.sys_role.create_time is '创建时间';
comment on column lf.sys_role.update_user is '更新人ID';
comment on column lf.sys_role.update_time is '更新时间';
comment on column lf.sys_role.bak is '备注';
--insert into lf.sys_role (id,depid,name,descr) values (1,1,'Admin','系统管理员');
--insert into lf.sys_role (id,depid,name,descr,is_admin) values (1,1,'Admin','系统管理员',1);
select * from lf.sys_role;
select a.*,b.name depname from lf.sys_role a inner join lf.sys_dep b on a.depid = b.id order by a.id limit 10 offset 0;
@@ -830,7 +832,9 @@
comment on column lf.sys_args.create_time is '创建时间';
comment on column lf.sys_args.update_user is '更新人ID';
comment on column lf.sys_args.update_time is '更新时间';
/* insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('自动登出时间',15,15,3,1440,1,'默认用户15分钟不操作,就自动登出系统。','AUTO_LOGOUT');
/* insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('密码出错次数',5,5,3,20,1,'默认用户密码连续输入出错5次,就暂时拒绝登录。','PWD_ERR_COUNT');
insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('密码出错等待时间',5,5,1,60,1,'默认用户密码连续输入多次出错时,5分钟内拒绝登录。','PWD_ERR_TIME');
insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('自动登出时间',15,15,3,1440,1,'默认用户15分钟不操作,就自动登出系统。','AUTO_LOGOUT');
insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('令牌有效期',240,240,60,1440,1,'令牌默认有效期为240分钟,超时将失效。','TOKEN_EXPIRE');
insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('缓存有效期',240,240,60,1440,1,'缓存默认有效期为240分钟,超时将失效。','CACHE_EXPIRE');
insert into lf.sys_args (name,cvalue,dvalue,min_value,max_value,times,descr,mark) values ('最大文件数',2000,2000,500,2500,1,'单个文件夹下默认最大存储文件的数目为2000个。','MAX_FILES');
pom.xml
@@ -6,7 +6,7 @@
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.0.RELEASE</version>
        <version>2.3.6.RELEASE</version>
        <relativePath/>
    </parent>
@@ -180,6 +180,12 @@
            <artifactId>commons-io</artifactId>
            <version>2.5</version>
        </dependency>
        <!--GDAL-->
        <dependency>
            <groupId>org.gdal</groupId>
            <artifactId>gdal</artifactId>
            <version>3.2.0</version>
        </dependency>
    </dependencies>
    <build>
@@ -187,7 +193,7 @@
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.0.RELEASE</version>
                <!--<version>2.3.0.RELEASE</version>-->
                <configuration>
                    <mainClass>com.lf.server.LfApplication</mainClass>
                </configuration>
src/main/java/com/lf/server/config/InitConfig.java
@@ -1,5 +1,6 @@
package com.lf.server.config;
import com.lf.server.helper.GdalHelper;
import com.lf.server.helper.PathHelper;
import com.lf.server.service.sys.ArgsService;
import org.apache.commons.logging.Log;
@@ -25,7 +26,13 @@
    @Override
    public void run(ApplicationArguments args) {
        // noinspection AlibabaRemoveCommentedCode
        try {
            // "E:\\data\\7.Insar\\insartest.tif","E:\\data\\6.高光谱\\GF5_Cut_1.img","E:\\data\\22.tif\\110.747 sq km.tif","E:\\Test\\Test.gdb"
            //GdalHelper.readTif("E:\\data\\7.Insar\\insartest.tif")
            //GdalHelper.readShp("E:\\data\\13.cppe\\shps\\addr.shp");
            //GdalHelper.readGdb("E:\\Test\\addr.gdb");
            pathHelper.init();
            argsService.initSettingData();
src/main/java/com/lf/server/config/RestTemplateConfig.java
@@ -62,9 +62,11 @@
        }
        HttpClient httpClient = HttpClientBuilder.create().setMaxConnTotal(this.maxTotalConnect).setMaxConnPerRoute(this.maxConnectPerRoute).build();
        HttpComponentsClientHttpRequestFactory factory = new HttpComponentsClientHttpRequestFactory(httpClient);
        factory.setConnectTimeout(this.connectTimeout);
        factory.setReadTimeout(this.readTimeout);
        return factory;
    }
src/main/java/com/lf/server/controller/sys/UserController.java
@@ -4,8 +4,7 @@
import com.lf.server.controller.all.BaseController;
import com.lf.server.entity.all.ResponseMsg;
import com.lf.server.entity.sys.UserEntity;
import com.lf.server.helper.Md5Helper;
import com.lf.server.helper.StringHelper;
import com.lf.server.entity.ctrl.UserUpdateEntity;
import com.lf.server.service.sys.TokenService;
import com.lf.server.service.sys.UserService;
import io.swagger.annotations.Api;
@@ -16,7 +15,6 @@
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
/**
@@ -162,7 +160,7 @@
    @PostMapping(value = "/insertUser", produces = "application/json; charset=UTF-8")
    public ResponseMsg<Integer> insertUser(@RequestBody UserEntity entity, HttpServletRequest req) {
        try {
            String str = userService.ValidateNewPwd(entity);
            String str = userService.validateNewPwd(entity);
            if (str != null) {
                return fail(str, -1);
            }
@@ -194,7 +192,7 @@
            UserEntity ue = tokenService.getCurrentUser(req);
            for (UserEntity entity : list) {
                String str = userService.ValidateNewPwd(entity);
                String str = userService.validateNewPwd(entity);
                if (str != null) {
                    return fail(str, -1);
                }
@@ -257,7 +255,7 @@
    @PostMapping(value = "/updateUser", produces = "application/json; charset=UTF-8")
    public ResponseMsg<Integer> updateUser(@RequestBody UserEntity entity, HttpServletRequest req) {
        try {
            String str = userService.ValidateOldPwd(entity);
            String str = userService.validateOldPwd(entity);
            if (str != null) {
                return fail(str, -1);
            }
@@ -276,49 +274,35 @@
    }
    @SysLog()
    @ApiOperation(value = "更新用户密码")
    @ApiOperation(value = "更新多个用户密码")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "user", value = "用户实体类", dataType = "UsersEntity", paramType = "body", example = "")
            @ApiImplicitParam(name = "adminPwd", value = "管理员密码", dataType = "String", paramType = "body", example = ""),
            @ApiImplicitParam(name = "newPwd", value = "新密码", dataType = "String", paramType = "body", example = ""),
            @ApiImplicitParam(name = "ids", value = "用户ID集合", dataType = "List<Integer>", paramType = "body", example = "")
    })
    @PostMapping(value = "/updateUserPwd")
    public ResponseMsg<Boolean> updateUserPwd(@RequestBody UserEntity user, HttpServletRequest req, HttpServletResponse res) {
    @PostMapping(value = "/updateUsersPwd", produces = "application/json; charset=UTF-8")
    public ResponseMsg<Boolean> updateUsersPwd(@RequestBody UserUpdateEntity uue, HttpServletRequest req) {
        try {
            if (user == null) {
                return fail("请提交用户信息!", false);
            }
            if (StringHelper.isEmpty(user.getPwd())) {
                return fail("请输入用户密码!", false);
            }
            if (StringHelper.isEmpty(user.getSalt())) {
                return fail("请输入管理员密码!", false);
            }
            if (!StringHelper.checkPwdValid(user.getPwd())) {
                return fail("新密码不符合规则要求!", false);
            if (uue == null || uue.getIds() == null || uue.getIds().isEmpty()) {
                return fail("没有找到数据", false);
            }
            UserEntity ue = tokenService.getCurrentUser(req);
            if (ue == null) {
                return fail("没有登录或登录超时!", false);
            }
            if (!Md5Helper.validatePassword(user.getSalt(), ue.getPwd())) {
                return fail("管理员密码不正确!", false);
            String str = userService.validateAdminPwd(ue, uue.getAdminPwd());
            if (str != null) {
                return fail(str, false);
            }
            UserEntity userEntity = userService.selectUser(user.getId());
            if (userEntity == null) {
                return fail("没有找到要修改的用户!", false);
            str = userService.validateNewPwd(ue, uue.getNewPwd());
            if (str != null) {
                return fail(str, false);
            }
            // è®¾ç½®æ–°å¯†ç 
            String md5 = Md5Helper.reverse(Md5Helper.generate(user.getPwd()));
            userEntity.setPwd(md5);
            // è®¾ç½®æ›´æ–°ä¿¡æ¯
            userEntity.setUpdateUser(ue.getId());
            Integer rows = userService.updateUsers(userEntity);
            Integer rows = userService.updateUsersPwd(ue.getId(), ue.getSalt(), uue.getIds());
            return success(rows > 0 ? "更新成功" : "更新失败", rows > 0);
        } catch (Exception ex) {
            return fail(ex.getMessage(), false);
        }
    }
}
}
src/main/java/com/lf/server/entity/all/SettingData.java
@@ -6,6 +6,16 @@
 */
public class SettingData {
    /**
     * å¯†ç å‡ºé”™æ¬¡æ•°
     */
    public static int PWD_ERR_COUNT = 5;
    /**
     * å‡ºé”™ç­‰å¾…æ—¶é—´
     */
    public static int PWD_ERR_TIME = 5;
    /**
     * è‡ªåŠ¨ç™»å‡ºæ—¶é—´
     */
    public static int AUTO_LOGOUT = 15;
src/main/java/com/lf/server/entity/ctrl/LayerDto.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,50 @@
package com.lf.server.entity.ctrl;
import java.util.List;
import java.util.Map;
/**
 * å›¾å±‚信息
 * @author WWW
 */
public class LayerDto {
    private long count;
    private String layerName;
    private List<Map> list;
    private List<Map<String, String>> map;
    public long getCount() {
        return count;
    }
    public void setCount(long count) {
        this.count = count;
    }
    public String getLayerName() {
        return layerName;
    }
    public void setLayerName(String layerName) {
        this.layerName = layerName;
    }
    public List<Map> getList() {
        return list;
    }
    public void setList(List<Map> list) {
        this.list = list;
    }
    public List<Map<String, String>> getMap() {
        return map;
    }
    public void setMap(List<Map<String, String>> map) {
        this.map = map;
    }
}
src/main/java/com/lf/server/entity/ctrl/UserUpdateEntity.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,46 @@
package com.lf.server.entity.ctrl;
import java.io.Serializable;
import java.util.List;
/**
 * ç”¨æˆ·æ›´æ–°ç±»
 * @author WWW
 */
public class UserUpdateEntity implements Serializable {
    private static final long serialVersionUID = 8390219588267518254L;
    private String adminPwd;
    private String newPwd;
    private List<Integer> ids;
    public UserUpdateEntity() {
    }
    public String getAdminPwd() {
        return adminPwd;
    }
    public void setAdminPwd(String adminPwd) {
        this.adminPwd = adminPwd;
    }
    public String getNewPwd() {
        return newPwd;
    }
    public void setNewPwd(String newPwd) {
        this.newPwd = newPwd;
    }
    public List<Integer> getIds() {
        return ids;
    }
    public void setIds(List<Integer> ids) {
        this.ids = ids;
    }
}
src/main/java/com/lf/server/entity/sys/RoleEntity.java
@@ -19,6 +19,8 @@
    private String descr;
    private int isAdmin;
    private int createUser;
    private Timestamp createTime;
@@ -67,6 +69,14 @@
        this.descr = descr;
    }
    public int getIsAdmin() {
        return isAdmin;
    }
    public void setIsAdmin(int isAdmin) {
        this.isAdmin = isAdmin;
    }
    public int getCreateUser() {
        return createUser;
    }
src/main/java/com/lf/server/helper/GdalHelper.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,380 @@
package com.lf.server.helper;
import com.lf.server.entity.ctrl.LayerDto;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.gdal.gdal.Band;
import org.gdal.gdal.Driver;
import org.gdal.gdal.gdal;
import org.gdal.gdal.Dataset;
import org.gdal.gdalconst.gdalconstConstants;
import org.gdal.ogr.*;
import org.gdal.osr.SpatialReference;
import java.sql.Time;
import java.sql.Timestamp;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * GDAL帮助类
 * @author WWW
 */
@SuppressWarnings("ALL")
public class GdalHelper {
    private final static Log log = LogFactory.getLog(GdalHelper.class);
    static {
        // æ³¨å†Œæ‰€æœ‰çš„驱动
        gdal.AllRegister();
        // ä¸ºäº†æ”¯æŒä¸­æ–‡è·¯å¾„,请添加下面这句代码
        gdal.SetConfigOption("GDAL_FILENAME_IS_UTF8", "YES");
        // é…ç½®GDAL_DATA路径(gdal根目录下的bin\gdal-data)
        // gdal.SetConfigOption("GDAL_DATA", "E:\\terrait\\TianJin\\Zip\\release-1928-x64-dev\\release-1928-x64\\bin\\gdal-data");
        // gdal.SetConfigOption("PROJ_LIB", "E:\\terrait\\TianJin\\Zip\\release-1928-x64-dev\\release-1928-x64\\bin\\proj7\\share");
        // ä¸ºäº†ä½¿å±žæ€§è¡¨å­—段支持中文,请添加下面这句:CP936
        gdal.SetConfigOption("SHAPE_ENCODING", "");
    }
    /**
     * è¯»å–tif文件
     *
     * @param fileName
     */
    public static void readTif(String fileName) {
        // è¯»å–影像数据
        Dataset dataset = gdal.Open(fileName, gdalconstConstants.GA_ReadOnly);
        if (dataset == null) {
            System.out.println("read fail!");
            return;
        }
        // providing various methods for a format specific driver.
        Driver driver = dataset.GetDriver();
        System.out.println("driver name: " + driver.getLongName());
        // è¯»å–影像信息
        int xSize = dataset.getRasterXSize();
        int ySzie = dataset.getRasterYSize();
        int rasterCount = dataset.getRasterCount();
        System.out.println("dataset xSize: " + xSize + ", ySzie = " + ySzie + ", rasterCount = " + rasterCount);
        Band band = dataset.GetRasterBand(1);
        // the data type of the band.
        int type = band.GetRasterDataType();
        System.out.println("data type = " + type + ", " + (type == gdalconstConstants.GDT_Byte));
        // Frees the native resource associated to a Dataset object and close the file.
        dataset.delete();
        gdal.GDALDestroyDriverManager();
    }
    private static void writeShp(String filePath) {
        try {
            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
            if (driver == null) {
                System.out.println(" ESRI shapefile驱动不可用!\n");
                System.out.println("fail");
            }
            // Open()的第二个参数默认为0,是以只读方式打开文件;1是读写方式打开
            DataSource dSource = driver.Open(filePath, 0);
            Layer layer = dSource.GetLayerByIndex(0);
            FieldDefn fieldDefn = new FieldDefn("name", ogr.OFTString);
            fieldDefn.SetWidth(50);
            layer.CreateField(fieldDefn, 1);
            layer.DeleteField(layer.FindFieldIndex("name", 1));
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    /**
     * è¯»å–shp文件
     * @param filePath
     */
    public static void readShp(String filePath) {
        try {
            org.gdal.ogr.Driver driver = ogr.GetDriverByName("ESRI shapefile");
            if (driver == null) {
                System.out.println(" ESRI shapefile驱动不可用!\n");
                System.out.println("fail");
            }
            DataSource dataSource = driver.Open(filePath);
            Layer layer = dataSource.GetLayer(0);
            String layerName = layer.GetName();
            System.out.println("图层名称:" + layerName);
            SpatialReference spatialReference = layer.GetSpatialRef();
            // System.out.println(spatialReference)
            System.out.println("空间参考坐标系:" + spatialReference.GetAttrValue("AUTHORITY", 0) + spatialReference.GetAttrValue("AUTHORITY", 1));
            double[] layerExtent = layer.GetExtent();
            System.out.println("图层范围:minx:" + layerExtent[0] + ",maxx:" + layerExtent[1] + ",miny:" + layerExtent[2] + ",maxy:" + layerExtent[3]);
            FeatureDefn featureDefn = layer.GetLayerDefn();
            Map<String, Object> fieldMap = new HashMap(5);
            for (int i = 0, count = featureDefn.GetFieldCount(); i < count; i++) {
                FieldDefn fieldDefn = featureDefn.GetFieldDefn(i);
                //得到属性字段类型
                int fieldType = fieldDefn.GetFieldType();
                String fieldTypeName = fieldDefn.GetFieldTypeName(fieldType);
                //得到属性字段名称
                String fieldName = fieldDefn.GetName();
                fieldMap.put(fieldTypeName, fieldName);
            }
            long featureCount = layer.GetFeatureCount();
            System.out.println("图层要素个数:" + featureCount);
            for (int i = 0; i < featureCount; i++) {
                Feature feature = layer.GetFeature(i);
                Object[] arr = fieldMap.values().toArray();
                for (int k = 0; k < arr.length; k++) {
                    String value = feature.GetFieldAsString(arr[k].toString());
                    System.out.print(" å±žæ€§åç§°:" + arr[k].toString() + ",属性值:" + value);
                }
                System.out.println();
                break;
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    public static LayerDto getLayerDto(String filePath) {
        org.gdal.ogr.Driver driver = ogr.GetDriverByName("OpenFileGDB");
        if (driver == null) {
            return null;
        }
        List<Map> list = new ArrayList<>();
        List<Map<String, String>> mapList = new ArrayList<>();
        LayerDto layerDto = new LayerDto();
        DataSource dataSource = null;
        try {
            dataSource = driver.Open(filePath, 0);
            int num = dataSource.GetLayerCount();
            for (int i = 0; i < num; i++) {
                //  èŽ·å–å›¾å±‚
                Layer layer = dataSource.GetLayer(i);
                // è¡¨åç§°
                String strlayerName = layer.GetName();
                // èŽ·å–å›¾å±‚è¦æ•°ä¸ªæ•°
                long count = layer.GetFeatureCount();
                if (0 != count) {
                    do {
                        // èŽ·å–å›¾å±‚ä¸‹çš„è¦ç´ 
                        Feature feature = layer.GetNextFeature();
                        if (null == feature) {
                            break;
                        }
                        // èŽ·å–è¾¹ç•Œåæ ‡
                        Geometry geometry = feature.GetGeometryRef();
                        if (geometry != null) {
                            String geometryJson = geometry.ExportToJson();
                            String str = geometryJson.substring(geometryJson.lastIndexOf(":") + 1, geometryJson.length());
                            if (!" [ [ ] ] }".equals(str)) {
                                String s1 = str.substring(7, str.length() - 8);
                                String[] split = s1.replaceAll(" ", "").replaceAll("\\[", "").replaceAll("]", "").split(",");
                                List<String> xList = new ArrayList();
                                List<String> yList = new ArrayList();
                                Map<String, String> map1 = new HashMap(5);
                                for (int j = 0; j < split.length; j++) {
                                    if (j != (split.length - 1) && j % 2 == 0) {
                                        map1.put(split[j], split[j + 1]);
                                    }
                                }
                                mapList.add(map1);
                            }
                        }
                        Map map = new HashMap(5);
                        //获取属性
                        for (int p = 0; p < feature.GetFieldCount(); p++) {
                            map.put(feature.GetFieldDefnRef(p).GetName(), getProperty(feature, p));
                        }
                        list.add(map);
                        feature.delete();
                    } while (true);
                }
                layerDto.setLayerName(strlayerName);
                layerDto.setList(list);
                layerDto.setCount(count);
                layerDto.setMap(mapList);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (dataSource != null) {
                dataSource.delete();
            }
        }
        return layerDto;
    }
    /**
     * è¯»å–gdb文件
     * @param filePath
     */
    public static void readGdb(String filePath) {
        try {
            org.gdal.ogr.Driver driver = ogr.GetDriverByName("OpenFileGDB");
            if (driver == null) {
                return;
            }
            DataSource dataSource = driver.Open(filePath, 0);
            for (int i = 0, count = dataSource.GetLayerCount(); i < count; i++) {
                // èŽ·å–å›¾å±‚
                Layer layer = dataSource.GetLayer(i);
                System.out.println(i + "\t" + layer.GetName());
                do {
                    // èŽ·å–å›¾å±‚ä¸‹çš„è¦ç´ 
                    Feature feature = layer.GetNextFeature();
                    if (null == feature) {
                        break;
                    }
                    // èŽ·å–æ ·å¼ï¼Œè¿™é‡Œæ˜¯ç©ºï¼Œå¾…ç¡®å®š
                    System.out.println(feature.GetStyleString());
                    // èŽ·å–geometry,也可以ExportToWkb() gml等等
                    System.out.println(feature.GetGeometryRef().ExportToWkt());
                    // èŽ·å–å±žæ€§
                    System.out.println("----------------------------------");
                    for (int p = 0; p < feature.GetFieldCount(); p++) {
                        System.out.println(feature.GetFieldDefnRef(p).GetName() + "\t" + getProperty(feature, p));
                    }
                    System.out.println("----------------------------------");
                    break;
                } while (true);
            }
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
    private static Object getProperty(Feature feature, int index) {
        int type = feature.GetFieldType(index);
        PropertyGetter propertyGetter;
        if (type < 0 || type >= PROPERTY_GETTERS.length) {
            propertyGetter = STRING_PROPERTY_GETTER;
        } else {
            propertyGetter = PROPERTY_GETTERS[type];
        }
        try {
            return propertyGetter.get(feature, index);
        } catch (Exception ex) {
            // ex.printStackTrace()
            log.error(ex.getMessage() + ex.getStackTrace() + "\n");
            return null;
        }
    }
    /**
     * å±žæ€§èŽ·å–å™¨
     */
    @FunctionalInterface
    private interface PropertyGetter {
        /**
         * èŽ·å–å±žæ€§
         *
         * @param feature
         * @param index
         * @return
         */
        Object get(Feature feature, int index);
    }
    private static final PropertyGetter STRING_PROPERTY_GETTER = (feature, index) -> feature.GetFieldAsString(index);
    /**
     * feature.GetFieldType(index)得到一个属性类型的int值,该值对应具体类型
     */
    private static final PropertyGetter[] PROPERTY_GETTERS = new PropertyGetter[]{
            // 0-Integer
            (feature, index) -> feature.GetFieldAsInteger(index),
            // 1-IntegerList
            (feature, index) -> feature.GetFieldAsIntegerList(index),
            // 2-Real
            (feature, index) -> feature.GetFieldAsDouble(index),
            // 3-RealList
            (feature, index) -> feature.GetFieldAsDoubleList(index),
            // 4-String
            STRING_PROPERTY_GETTER,
            // 5-StringList
            (feature, index) -> feature.GetFieldAsStringList(index),
            // 6-unknown
            STRING_PROPERTY_GETTER,
            // 7-unknown
            STRING_PROPERTY_GETTER,
            // 8-Binary
            (feature, index) -> feature.GetFieldAsBinary(index),
            // 9-Date
            (feature, index) -> {
                int[] pnYear = new int[1];
                int[] pnMonth = new int[1];
                int[] pnDay = new int[1];
                int[] pnHour = new int[1];
                int[] pnMinute = new int[1];
                float[] pfSecond = new float[1];
                int[] pnTZFlag = new int[1];
                feature.GetFieldAsDateTime(index, pnYear, pnMonth, pnDay, pnHour, pnMinute, pfSecond, pnTZFlag);
                java.sql.Date date = java.sql.Date.valueOf(LocalDate.of(pnYear[0], pnMonth[0], pnDay[0]));
                return date;
            },
            // 10-Time
            (feature, index) -> {
                int[] pnYear = new int[1];
                int[] pnMonth = new int[1];
                int[] pnDay = new int[1];
                int[] pnHour = new int[1];
                int[] pnMinute = new int[1];
                float[] pfSecond = new float[1];
                int[] pnTZFlag = new int[1];
                feature.GetFieldAsDateTime(index, pnYear, pnMonth, pnDay, pnHour, pnMinute, pfSecond, pnTZFlag);
                float fSecond = pfSecond[0];
                int s = (int) fSecond;
                int ns = (int) (1000000000 * fSecond - s);
                Time time = Time.valueOf(LocalTime.of(pnHour[0], pnMinute[0], s, ns));
                return time;
            },
            // 11-DateTime
            (feature, index) -> {
                int[] pnYear = new int[1];
                int[] pnMonth = new int[1];
                int[] pnDay = new int[1];
                int[] pnHour = new int[1];
                int[] pnMinute = new int[1];
                float[] pfSecond = new float[1];
                int[] pnTZFlag = new int[1];
                feature.GetFieldAsDateTime(index, pnYear, pnMonth, pnDay, pnHour, pnMinute, pfSecond, pnTZFlag);
                float fSecond = pfSecond[0];
                int s = (int) fSecond;
                int ns = (int) (1000000000 * fSecond - s);
                LocalDateTime localDateTime = LocalDateTime.of(
                        LocalDate.of(pnYear[0], pnMonth[0], pnDay[0]),
                        LocalTime.of(pnHour[0], pnMinute[0], s, ns)
                );
                Timestamp timestamp = Timestamp.valueOf(localDateTime);
                return timestamp;
            },
            // 12-Integer64
            (feature, index) -> feature.GetFieldAsInteger64(index),
            // 13 Integer64List
            (feature, index) -> feature.GetFieldAsIntegerList(index)
            // >=14    (unknown)
    };
}
src/main/java/com/lf/server/helper/WebHelper.java
@@ -272,7 +272,7 @@
     * @param jsonPack
     * @throws Exception
     */
    public static void write2Page(HttpServletResponse response, String jsonPack) throws IOException {
    public static boolean write2Page(HttpServletResponse response, String jsonPack) throws IOException {
        response.setContentType("application/json;charset=UTF-8");
        response.setHeader("Cache-Control", "no-cache");
        response.setHeader("Pragma", "No-cache");
@@ -283,5 +283,7 @@
        out.flush();
        out.close();
        return false;
    }
}
src/main/java/com/lf/server/interceptor/AuthInterceptor.java
@@ -1,16 +1,16 @@
package com.lf.server.interceptor;
import com.alibaba.fastjson.JSON;
import com.lf.server.entity.all.HttpStatus;
import com.lf.server.entity.all.ResponseMsg;
import com.lf.server.entity.all.StaticData;
import com.lf.server.entity.all.*;
import com.lf.server.entity.sys.UserEntity;
import com.lf.server.helper.StringHelper;
import com.lf.server.helper.WebHelper;
import com.lf.server.service.all.RedisService;
import com.lf.server.service.sys.TokenService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.cache.RedisCache;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor;
@@ -46,31 +46,28 @@
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        try {
            System.out.println(request.getRequestURI().toLowerCase() + "," + (handler instanceof HandlerMethod));
            // éžæ–¹æ³•,无需拦截
            if (!(handler instanceof HandlerMethod)) {
                return true;
            }
            // æ— éœ€æŽˆæƒ
            if (noNeedAuth(request)) {
            System.out.println(request.getRequestURI().toLowerCase() + ", " + (handler instanceof HandlerMethod));
            // éžæ–¹æ³• æˆ– æ— éœ€æŽˆæƒï¼Œæ— éœ€æ‹¦æˆª
            if (!(handler instanceof HandlerMethod) || noNeedAuth(request)) {
                return true;
            }
            String token = WebHelper.getToken(request);
            if (StringHelper.isNull(token)) {
                WebHelper.write2Page(response, NO_TOKEN);
                return false;
                return WebHelper.write2Page(response, NO_TOKEN);
            }
            UserEntity ue = tokenService.getCurrentUser(request);
            if (ue == null) {
                WebHelper.write2Page(response, NO_LOGIN);
                return false;
                return WebHelper.write2Page(response, NO_LOGIN);
            }
            //noinspection AlibabaRemoveCommentedCode
            Object objCount = tokenService.redisService.get(RedisCacheKey.signPwdError(ue.getUid()));
            if (objCount != null && (int) objCount > SettingData.PWD_ERR_COUNT) {
                return WebHelper.write2Page(response, JSON.toJSONString(new ResponseMsg<String>(HttpStatus.NO_LOGIN_ERROR, SettingData.PWD_ERR_TIME + "分钟内禁止登录")));
            }
            // noinspection AlibabaRemoveCommentedCode
            // æƒé™æ ¡éªŒ
            return true;
src/main/java/com/lf/server/mapper/data/DictMapper.java
@@ -43,10 +43,10 @@
    /**
     * æ’入多条
     *
     * @param dictEntity
     * @param list
     * @return
     */
    public Integer insertDicts(List<DictEntity> dictEntity);
    public Integer insertDicts(List<DictEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/data/DirMapper.java
@@ -24,10 +24,10 @@
    /**
     * æ’入多条
     * @param dirEntity
     * @param list
     * @return
     */
    public Integer insertDirs(List<DirEntity> dirEntity);
    public Integer insertDirs(List<DirEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
@@ -52,10 +52,10 @@
    /**
     * æ›´æ–°å¤šæ¡
     * @param dirEntity
     * @param list
     * @return
     */
    public Integer updateDirs(List<DirEntity> dirEntity);
    public Integer updateDirs(List<DirEntity> list);
    /**
     * æŸ¥è¯¢å•条数据
src/main/java/com/lf/server/mapper/data/StyleMapper.java
@@ -43,10 +43,10 @@
    /**
     * æ’入多条
     *
     * @param styleEntity
     * @param list
     * @return
     */
    public Integer insertStyles(List<StyleEntity> styleEntity);
    public Integer insertStyles(List<StyleEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/data/VerMapper.java
@@ -45,10 +45,10 @@
    /**
     * æ’入多条
     *
     * @param verEntity
     * @param list
     * @return
     */
    public Integer insertVersions(List<VerEntity> verEntity);
    public Integer insertVersions(List<VerEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/AuthMapper.java
@@ -61,10 +61,10 @@
    /**
     * æ’入多条
     *
     * @param authEntity
     * @param list
     * @return
     */
    public Integer insertAuths(List<AuthEntity> authEntity);
    public Integer insertAuths(List<AuthEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/DepMapper.java
@@ -24,10 +24,10 @@
    /**
     * æ’入多条
     * @param depEntity
     * @param list
     * @return
     */
    public Integer insertDeps(List<DepEntity> depEntity);
    public Integer insertDeps(List<DepEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
     * @param id
src/main/java/com/lf/server/mapper/sys/LoginMapper.java
@@ -50,10 +50,10 @@
    /**
     * æ’入多条
     *
     * @param loginEntity
     * @param list
     * @return
     */
    public Integer insertLogins(List<LoginEntity> loginEntity);
    public Integer insertLogins(List<LoginEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/MenuMapper.java
@@ -24,10 +24,10 @@
    /**
     * æ’入多条
     * @param menuEntity
     * @param list
     * @return
     */
    public Integer insertMenus(List<MenuEntity> menuEntity);
    public Integer insertMenus(List<MenuEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
     * @param id
@@ -64,10 +64,10 @@
    /**
     * æ›´æ–°å¤šæ¡
     * @param menuEntity
     * @param list
     * @return
     */
    public Integer updateMenus(List<MenuEntity> menuEntity);
    public Integer updateMenus(List<MenuEntity> list);
    /**
     * é€’归查询
src/main/java/com/lf/server/mapper/sys/OperateMapper.java
@@ -48,10 +48,10 @@
    /**
     * æ’入多条
     *
     * @param operateEntity
     * @param list
     * @return
     */
    public Integer insertOperates(List<OperateEntity> operateEntity);
    public Integer insertOperates(List<OperateEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/ResMapper.java
@@ -61,10 +61,10 @@
    /**
     * æ’入多条
     *
     * @param resEntity
     * @param list
     * @return
     */
    public Integer insertRess(List<ResEntity> resEntity);
    public Integer insertRess(List<ResEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/ResOpMapper.java
@@ -50,10 +50,10 @@
    /**
     * æ’入多条
     *
     * @param resOpEntity
     * @param list
     * @return
     */
    public Integer insertResOps(List<ResOpEntity> resOpEntity);
    public Integer insertResOps(List<ResOpEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/RoleMapper.java
@@ -45,10 +45,10 @@
    /**
     * æ’入多条
     *
     * @param roleEntity
     * @param list
     * @return
     */
    public Integer insertRoles(List<RoleEntity> roleEntity);
    public Integer insertRoles(List<RoleEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/TokenMapper.java
@@ -69,10 +69,10 @@
    /**
     * æ’入多条
     *
     * @param tokenEntity
     * @param list
     * @return
     */
    public Integer insertTokens(List<TokenEntity> tokenEntity);
    public Integer insertTokens(List<TokenEntity> list);
    /**
     * åˆ é™¤ä¸€æ¡
src/main/java/com/lf/server/mapper/sys/UserMapper.java
@@ -124,4 +124,14 @@
     * @return
     */
    public List<UserEntity> selectByPageForRole(String uname, Integer roleid, Integer depid, Integer limit, Integer offset);
    /**
     * æ›´æ–°å¤šä¸ªç”¨æˆ·å¯†ç 
     *
     * @param updateUser
     * @param pwd
     * @param ids
     * @return
     */
    public Integer updateUsersPwd(Integer updateUser, String pwd, List<Integer> ids);
}
src/main/java/com/lf/server/service/sys/TokenService.java
@@ -27,7 +27,7 @@
@Service
public class TokenService implements TokenMapper {
    @Autowired
    private RedisService redisService;
    public RedisService redisService;
    @Autowired
    TokenMapper tokenMapper;
src/main/java/com/lf/server/service/sys/UserService.java
@@ -1,14 +1,19 @@
package com.lf.server.service.sys;
import com.lf.server.entity.all.RedisCacheKey;
import com.lf.server.entity.all.SettingData;
import com.lf.server.entity.sys.UserEntity;
import com.lf.server.helper.Md5Helper;
import com.lf.server.helper.RsaHelper;
import com.lf.server.helper.StringHelper;
import com.lf.server.mapper.sys.UserMapper;
import com.lf.server.service.all.RedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.cache.RedisCache;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.concurrent.TimeUnit;
/**
 * ç”¨æˆ·è¡¨
@@ -20,6 +25,9 @@
public class UserService implements UserMapper {
    @Autowired
    UserMapper userMapper;
    @Autowired
    RedisService redisService;
    @Override
    public Integer selectCount(String uname) {
@@ -94,10 +102,15 @@
        return userMapper.selectByPageForRole(uname, roleid, depid, limit, offset);
    }
    @Override
    public Integer updateUsersPwd(Integer updateUser, String pwd, List<Integer> ids) {
        return userMapper.updateUsersPwd(updateUser, pwd, ids);
    }
    /**
     * éªŒè¯æ–°ç”¨æˆ·å¯†ç 
     */
    public String ValidateNewPwd(UserEntity entity) {
    public String validateNewPwd(UserEntity entity) {
        if (entity == null) {
            return "没有找到用户";
        }
@@ -123,7 +136,7 @@
    /**
     * éªŒè¯è€ç”¨æˆ·å¯†ç 
     */
    public String ValidateOldPwd(UserEntity entity) {
    public String validateOldPwd(UserEntity entity) {
        if (entity == null) {
            return "没有找到用户";
        }
@@ -140,6 +153,7 @@
                return "没有找到用户";
            }
            if (!Md5Helper.validatePassword(pwd, ue.getPwd())) {
                //
                return "旧密码输入错误";
            }
            if (!StringHelper.checkPwdValid(salt)) {
@@ -155,4 +169,63 @@
            return "密码解密失败";
        }
    }
    /**
     * éªŒè¯ç®¡ç†å‘˜å¯†ç 
     */
    public String validateAdminPwd(UserEntity ue, String adminPwd) {
        if (ue == null) {
            return "没有登录或超时";
        }
        if (StringHelper.isEmpty(adminPwd)) {
            return "管理员密码不能为空";
        }
        try {
            String pwd = RsaHelper.decrypt(adminPwd);
            if (!Md5Helper.validatePassword(pwd, ue.getPwd())) {
                return "管理员密码不正确";
            }
            return null;
        } catch (Exception ex) {
            return "密码解密失败";
        }
    }
    /**
     * éªŒè¯æ–°å¯†ç 
     */
    public String validateNewPwd(UserEntity ue, String newPwd) {
        if (StringHelper.isEmpty(newPwd)) {
            return "新密码不能为空";
        }
        try {
            String pwd = RsaHelper.decrypt(newPwd);
            if (!StringHelper.checkPwdValid(pwd)) {
                return "密码不符合要求";
            }
            String dbPwd = Md5Helper.reverse(Md5Helper.generate(pwd));
            ue.setSalt(dbPwd);
            return null;
        } catch (Exception ex) {
            return "密码解密失败";
        }
    }
    /**
     * è®¾ç½®å¯†ç é”™è¯¯ç¼“å­˜
     *
     * @param ue
     */
    public void setPwdErrCache(UserEntity ue) {
        String key = RedisCacheKey.signPwdError(ue.getUid());
        Object objCount = redisService.get(key);
        int count = objCount == null ? 1 : (int) objCount + 1;
        redisService.put(key, count, SettingData.PWD_ERR_TIME, TimeUnit.MINUTES);
    }
}
src/main/resources/application.yml
@@ -9,13 +9,31 @@
    name: land
spring:
  # redis
  redis:
    database: 0
    host: 127.0.0.1
    port: 6379
    password: rediS_5L#F4_Server
    timeout: 6000  # è¿žæŽ¥è¶…时时长(毫秒)
    pool:
      max-active: 1000  # è¿žæŽ¥æ± æœ€å¤§è¿žæŽ¥æ•°ï¼ˆä½¿ç”¨è´Ÿå€¼è¡¨ç¤ºæ²¡æœ‰é™åˆ¶ï¼‰
      max-wait: -1      # è¿žæŽ¥æ± æœ€å¤§é˜»å¡žç­‰å¾…时间(使用负值表示没有限制)
      max-idle: 10      # è¿žæŽ¥æ± ä¸­çš„æœ€å¤§ç©ºé—²è¿žæŽ¥
      min-idle: 5       # è¿žæŽ¥æ± ä¸­çš„æœ€å°ç©ºé—²è¿žæŽ¥
  # session
  session:
    timeout: PT20M # 20分钟
  # jackson
  jackson:
    time-zone: GMT+8
    date-format: yyyy-MM-dd HH:mm:ss
    locale: zh_CN
  # datasource
  datasource:
    name: prod
    # JDBC åŸºæœ¬é…ç½®
    url: jdbc:postgresql://192.168.20.39:5433/langfang?useAffectedRows=true
    url: jdbc:postgresql://127.0.0.1:5432/langfang?useAffectedRows=true
    username : postgres
    password: postgres
    driver-class-name: org.postgresql.Driver
@@ -30,7 +48,6 @@
    removeAbandonedTimeout: 180
    # å…³é—­ abanded è¿žæŽ¥æ—¶è¾“出错误日志
    logAbandoned: true
    # é…ç½®è¿žæŽ¥æ± ä¿¡æ¯
    druid:
      ## åˆå§‹åŒ–大小,最小,最大
@@ -53,7 +70,7 @@
      test-on-borrow: false
      # å¦‚果为true(默认false),当应用使用完连接,连接池回收连接的时候会判断该连接是否还可用
      test-on-return: false
      # servlet配置
      stat-view-servlet:
        # sql监控开关
        enabled: true
@@ -90,20 +107,12 @@
            log-slow-sql: true
            slow-sql-millis: 2000
    redis:
      host: 192.168.20.39
      port: 6379
      password: rediS_5L#F4_Server
      database: 1
    jackson:
      time-zone: GMT+8
      date-format: yyyy-MM-dd HH:mm:ss
# mybatis
mybatis:
  type-aliases-package: com.lf.server.mapper
  config-location: classpath:mybatis.xml
  mapper-locations: classpath:mapper/**/*.xml
# logging
logging:
  config: classpath:logback-spring.xml
@@ -126,4 +135,4 @@
    # å…±äº«ç›®å½•
    share: D:\LF\share
    # ä¸´æ—¶ç›®å½•
    temp: D:\LF\temp
    temp: D:\LF\temp
src/main/resources/mapper/data/DictMapper.xml
@@ -45,7 +45,7 @@
        select * from lf.sys_dict where id = #{id}
    </select>
    <insert id="insertDict"   parameterType="com.lf.server.entity.data.DictEntity">
    <insert id="insertDict" parameterType="com.lf.server.entity.data.DictEntity">
       insert into lf.sys_dict
       (ns,tab,tab_desc,field,alias,type,len,precision,order_num,create_user,create_time,bak)
       values
@@ -53,25 +53,24 @@
      now(),#{bak});
    </insert>
    <insert id="insertDicts"   >
    <insert id="insertDicts">
       insert into lf.sys_dict
        (ns,tab,tab_desc,field,alias,type,len,precision,order_num,create_user,create_time,bak)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.ns},#{item.tab},#{item.tabDesc},#{item.field},#{item.alias},#{item.type},#{item.len},
            #{item.precision},#{item.orderNum},#{item.createUser},now(),#{item.bak})
        </foreach>
    </insert>
    <delete id="deleteDict"  >
    <delete id="deleteDict">
        delete from lf.sys_dict where id = #{id}
    </delete>
    <delete id="deleteDicts"  >
    <delete id="deleteDicts">
        delete from lf.sys_dict where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/data/DirMapper.xml
@@ -38,7 +38,7 @@
        insert into lf.sys_dir
        (pid,name,code,descr,level,order_num,create_user,create_time,bak)
        values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.pid},#{item.name},#{item.code},#{item.descr},#{item.level}
            ,#{item.orderNum},#{item.createUser},now(),#{item.bak})
        </foreach>
@@ -48,11 +48,10 @@
        delete from lf.sys_dir where id = #{id}
    </delete>
    <delete id="deleteDirs"  >
    <delete id="deleteDirs">
        delete from lf.sys_dir where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
@@ -60,7 +59,6 @@
    update lf.sys_dir set  pid=#{pid},name=#{name},code=#{code},descr=#{descr},level=#{level},order_num=#{orderNum},
    update_user=#{updateUser},update_time=now(),bak=#{bak} where id=#{id}
    </update>
    <update id="updateDirs">
        <foreach collection="list" item="item" index="index" separator=";">
src/main/resources/mapper/data/DownloadMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_download where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/data/MetaFileMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_meta_file where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/data/MetaMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_meta where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/data/StyleMapper.xml
@@ -41,21 +41,20 @@
       insert into lf.sys_style
        (name,type,dirid,depid,ver,status,precision,descr,file_guid,view_guid,create_user,create_time,bak)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{item.name},#{item.type},#{item.dirid},#{item.depid},#{item.ver},#{item.status},#{item.precision},#{item.descr},
            #{item.fileGuid},#{item.viewGuid},#{item.createUser},now(),#{item.bak})
        </foreach>
    </insert>
    <delete id="deleteStyle"  >
    <delete id="deleteStyle">
        delete from lf.sys_style where id = #{id}
    </delete>
    <delete id="deleteStyles"  >
        delete from lf.sys_style where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/data/VerMapper.xml
@@ -57,7 +57,7 @@
       insert into lf.sys_ver
        (dirid,name,descr,create_user,create_time)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{item.dirid},#{item.name},#{item.descr},#{item.createUser},now())
        </foreach>
    </insert>
@@ -68,9 +68,8 @@
    <delete id="deleteVersions"  >
        delete from lf.sys_ver where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/ArgsMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_args where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/AttachMapper.xml
@@ -55,8 +55,8 @@
    <delete id="deletes">
        delete from lf.sys_attach where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/AuthMapper.xml
@@ -64,7 +64,7 @@
       insert into lf.sys_auth
        (name,tag,create_user,create_time,bak)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{item.name},#{item.tag},#{item.createUser},now(),#{item.bak})
        </foreach>
    </insert>
@@ -75,8 +75,8 @@
    <delete id="deleteAuths"  >
        delete from lf.sys_auth where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/BlacklistMapper.xml
@@ -59,8 +59,8 @@
    <delete id="deletes">
        delete from lf.sys_blacklist where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/DepMapper.xml
@@ -33,7 +33,7 @@
       #{level},#{orderNum},#{createUser},now(),#{bak});
    </insert>
    <insert id="insertDeps"   >
    <insert id="insertDeps">
       insert into lf.sys_dep
       (pid,name,sname,code,uncode,addr,contact,fax,email,post,website,level,order_num,create_user,create_time,bak)
       values
@@ -43,15 +43,14 @@
        </foreach>
    </insert>
    <delete id="deleteDep"  >
    <delete id="deleteDep">
        delete from lf.sys_dep where id = #{id}
    </delete>
    <delete id="deleteDeps"  >
    <delete id="deleteDeps">
        delete from lf.sys_dep where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/LoginMapper.xml
@@ -75,9 +75,8 @@
    <delete id="deleteLogins">
        delete from lf.sys_login where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/MenuAuthMapper.xml
@@ -78,8 +78,8 @@
    <delete id="deletes">
        delete from lf.sys_menu_auth where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/MenuMapper.xml
@@ -53,9 +53,8 @@
    <delete id="deleteMenus"  >
        delete from lf.sys_menu where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/MsgMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_msg where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/OperateMapper.xml
@@ -50,30 +50,28 @@
        select * from lf.sys_operate where id = #{id}
    </select>
    <insert id="insertOperate"   parameterType="com.lf.server.entity.sys.OperateEntity">
    <insert id="insertOperate" parameterType="com.lf.server.entity.sys.OperateEntity">
       insert into lf.sys_operate
       (modular1,modular2,url,ip,exec,clazz,type,userid,optime,bak)
       values
       (#{modular1},#{modular2},#{url},#{ip},#{exec},#{clazz},#{type},#{userid},now(),#{bak});
    </insert>
    <insert id="insertOperates"   >
       insert into lf.sys_operate
        (modular1,modular2,url,ip,exec,clazz,type,userid,optime,bak)
       values
    <insert id="insertOperates">
       insert into lf.sys_operate (modular1,modular2,url,ip,exec,clazz,type,userid,optime,bak) values
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{modular1},#{modular2},#{url},#{ip},#{exec},#{clazz},#{type},#{userid},now(),#{bak})
        </foreach>
    </insert>
    <delete id="deleteOperate"  >
    <delete id="deleteOperate">
        delete from lf.sys_operate where id = #{id}
    </delete>
    <delete id="deleteOperates"  >
    <delete id="deleteOperates">
        delete from lf.sys_operate where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/ResMapper.xml
@@ -64,7 +64,7 @@
       insert into lf.sys_res
        (name,server,source,depid,dirid,code,descr,img,create_user,create_time,bak)
       values
        <foreach collection="list"   item="item" index="index" separator=",">
        <foreach collection="list" item="item" index="index" separator=",">
            #{item.name},#{item.server},#{item.source},#{item.depid},#{item.dirid},#{item.code},#{item.descr},#{item.img},#{item.createUser},now(),#{item.bak})
        </foreach>
    </insert>
@@ -75,8 +75,8 @@
    <delete id="deleteRess">
        delete from lf.sys_res where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/ResOpMapper.xml
@@ -41,7 +41,6 @@
        limit #{limit} offset #{offset}
    </select>
    <select id="selectResOpAll" resultType="com.lf.server.entity.sys.ResOpEntity">
        select * from lf.sys_res_op order by id;
    </select>
@@ -50,31 +49,30 @@
        select * from lf.sys_res_op where id = #{id}
    </select>
    <insert id="insertResOp"   parameterType="com.lf.server.entity.sys.ResOpEntity">
    <insert id="insertResOp" parameterType="com.lf.server.entity.sys.ResOpEntity">
       insert into lf.sys_res_op
       (resid,type,ip,userid,optime)
       values
       (#{resid},#{type},#{ip},#{userid},now());
    </insert>
    <insert id="insertResOps"   >
    <insert id="insertResOps">
       insert into lf.sys_res_op
        (resid,type,ip,userid,optime)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{item.resid},#{item.type},#{item.ip},#{item.userid},now());
        </foreach>
    </insert>
    <delete id="deleteResOp"  >
    <delete id="deleteResOp">
        delete from lf.sys_res_op where id = #{id}
    </delete>
    <delete id="deleteResOps"  >
    <delete id="deleteResOps">
        delete from lf.sys_res_op where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/RoleMapper.xml
@@ -38,35 +38,34 @@
        select a.*,fn_rec_query(a.depid, 'dep') depName,fn_uname(a.create_user) createName,fn_uname(a.update_user) updateName from lf.sys_role a where a.id = #{id}
    </select>
    <insert id="insertRole"   parameterType="com.lf.server.entity.sys.RoleEntity">
    <insert id="insertRole" parameterType="com.lf.server.entity.sys.RoleEntity">
       insert into lf.sys_role
       (depid,name,descr,create_user,create_time,bak)
       (depid,name,descr,is_admin,create_user,create_time,bak)
       values
       (#{depid},#{name},#{descr},#{createUser},now(),#{bak});
       (#{depid},#{name},#{descr},#{isAdmin},#{createUser},now(),#{bak})
    </insert>
    <insert id="insertRoles"   >
    <insert id="insertRoles">
       insert into lf.sys_role
        (depid,name,descr,create_user,create_time,bak)
        (depid,name,descr,is_admin,create_user,create_time,bak)
       values
        <foreach collection="list"   item="item" index="index" separator=","  >
            (#{item.depid},#{item.name},#{item.descr},#{item.createUser},now(),#{item.bak})
        <foreach collection="list" item="item" index="index" separator=","  >
            (#{item.depid},#{item.name},#{item.descr},#{item.isAdmin},#{item.createUser},now(),#{item.bak})
        </foreach>
    </insert>
    <delete id="deleteRole"  >
    <delete id="deleteRole">
        delete from lf.sys_role where id = #{id}
    </delete>
    <delete id="deleteRoles"  >
    <delete id="deleteRoles">
        delete from lf.sys_role where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
    <update id="updateRole">
    update lf.sys_role set depid=#{depid}, name=#{name},descr=#{descr},update_user=#{id},update_time=now(),bak=#{bak} where id=#{id}
    update lf.sys_role set depid=#{depid},name=#{name},descr=#{descr},is_admin=#{isAdmin},update_user=#{id},update_time=now(),bak=#{bak} where id=#{id}
    </update>
</mapper>
src/main/resources/mapper/sys/RoleMenuAuthMapper.xml
@@ -79,8 +79,8 @@
    <delete id="deletes">
        delete from lf.sys_role_menu_auth where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/RoleResMapper.xml
@@ -52,8 +52,8 @@
    <delete id="deletes">
        delete from lf.sys_role_res where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/RoleUserMapper.xml
@@ -51,8 +51,8 @@
    <delete id="deletes">
        delete from lf.sys_role_user where id in
        <foreach item="ids" collection="list" index="index" open="(" separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/TokenMapper.xml
@@ -17,7 +17,6 @@
            <if test="name != null">
                and token = #{name}
            </if>
            <if test="type != null">
                and type = #{type}
            </if>
@@ -73,15 +72,14 @@
        </foreach>
    </insert>
    <delete id="deleteToken"  >
    <delete id="deleteToken">
        delete from lf.sys_token where id = #{id}
    </delete>
    <delete id="deleteTokens"  >
    <delete id="deleteTokens">
        delete from lf.sys_token where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
src/main/resources/mapper/sys/UserMapper.xml
@@ -83,7 +83,7 @@
          select create_user from lf.sys_token where token=#{token} and expire > now() limit 1)
    </select>
    <insert id="insertUser"  parameterType="com.lf.server.entity.sys.UserEntity">
    <insert id="insertUser" parameterType="com.lf.server.entity.sys.UserEntity">
       insert into lf.sys_user
       (depid,uid,uname,pwd,salt,sex,native,contact,job,email,addr,edu,idcard,status,create_user,create_time,bak)
       values
@@ -91,7 +91,7 @@
       #{status},#{createUser},now(),#{bak})
    </insert>
    <insert id="insertUsers"   >
    <insert id="insertUsers">
       insert into lf.sys_user
        (depid,uid,uname,pwd,salt,sex,native,contact,job,email,addr,edu,idcard,status,create_user,create_time,bak)
       values
@@ -101,15 +101,14 @@
        </foreach>
    </insert>
    <delete id="deleteUser"  >
    <delete id="deleteUser">
        delete from lf.sys_user where id = #{id}
    </delete>
    <delete id="deleteUsers"  >
    <delete id="deleteUsers">
        delete from lf.sys_user where id in
        <foreach item="ids" collection="list" index="index" open="("
                 separator="," close=")">
            #{ids}
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </delete>
@@ -117,4 +116,11 @@
    update lf.sys_user set depid=#{depid},uid=#{uid},uname=#{uname},pwd=#{pwd},salt=#{salt},sex=#{sex},native=#{natives},contact=#{contact},job=#{job},email=#{email},
    addr=#{addr},edu=#{edu},idcard=#{idcard},status=#{status},update_user=#{updateUser},update_time=now(),bak=#{bak} where id=#{id}
    </update>
    <update id="updateUsersPwd">
        update lf.sys_user set pwd=#{pwd},update_user=#{updateUser},update_time=now() where id in
        <foreach item="id" collection="ids" index="index" open="(" separator="," close=")">
            #{id}
        </foreach>
    </update>
</mapper>
˵Ã÷.txt
@@ -1,17 +1,24 @@
----------------------------------------------------------------------------------------------------
1.修改菜单、数据目录、单位的xls数据,编写递归查询SQL
2.登录时验证使用MD5+Salt密码
3.登录时的用户名和密码使用RSA加密、解密
4.WebSocket服务
5.资源实时监控(CPU信息+内存信息+在线用户+资源状态)
3.修改用户密码时使用MD5+Salt密码
4.解决Swagger-UI无法传递Cookie信息
6.密码复杂度验证(8-20位包含字母、数字和特殊字符)
7.后台服务访问添加登录验证拦截器
8.开发切面日志功能
9.数据库监控(Druid Monitor)+自动登录
12.下载文件并设置MIME类型
13.上传文件(commons-fileupload) *
.修改用户密码时使用MD5+Salt密码
.解决Swagger-UI无法传递Cookie信息
.密码复杂度验证(8-20位包含字母、数字和特殊字符)
.后台服务访问添加登录验证拦截器
.开发切面日志功能
.数据库监控(Druid Monitor)+自动登录
.下载文件并设置MIME类型
1.Redis服务配置强密码,SpringBoot启用密码
2.批量修改用户密码
3.修改所有的批量新增、删除、修改接口
4.使用GDAL读取tif、shp、gdb文件
5.5分钟密码错误5次拒绝登录 * <<
6.上传文件(commons-fileupload) *
----------------------------------------------------------------------------------------------------
java è°ƒç”¨gdal读取gdb数据,linux下java调用gdal:
https://blog.csdn.net/weixin_53853459/article/details/120954597
@@ -30,6 +37,9 @@
http://localhost:12316/sign/toIndex
http://localhost:12316/sign/toLogin
http://127.0.0.1:12316/sign/toLogin?service=http://www.sina.com.cn
.gdb > HFCP+LRRL + TFCA
.shp  > F5004_WT.shp + F5004_WL.shp + F5004.shp
----------------------------------------------------------------------------------------------------
String path = System.getProperty("user.dir");