summaryrefslogtreecommitdiff
path: root/src/main/java/com/mesasoft/cn/web
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/mesasoft/cn/web')
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/AuthController.java66
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/CategoryController.java75
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/CommonController.java94
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/ConfigController.java92
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/CustomErrorController.java42
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/DownloadedController.java41
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/FileController.java220
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/FileMangerController.java188
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/GlobalExceptionHandler.java49
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/UploadedController.java39
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/UserController.java281
-rw-r--r--src/main/java/com/mesasoft/cn/web/controller/ViewController.java63
12 files changed, 1250 insertions, 0 deletions
diff --git a/src/main/java/com/mesasoft/cn/web/controller/AuthController.java b/src/main/java/com/mesasoft/cn/web/controller/AuthController.java
new file mode 100644
index 0000000..24a4a0b
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/AuthController.java
@@ -0,0 +1,66 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IAuthService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author pantao
+ * @since 2018/3/8
+ */
+@RestController
+@RequestMapping("/auth")
+@Api(value = "/auth", description = "权限表相关操作")
+public class AuthController {
+
+ private final IAuthService authService;
+
+ @Autowired
+ public AuthController(IAuthService authService) {this.authService = authService;}
+
+ @ApiOperation(value = "添加权限记录", notes = "设置指定用户对指定文件的权限")
+ @ApiImplicitParams({@ApiImplicitParam(name = "files", value = "文件", example = "file1,file2,file3", required = true),
+ @ApiImplicitParam(name = "users", value = "用户", example = "user1,user2,user3", required = true),
+ @ApiImplicitParam(name = "auths", value = "权限", example = "1,1,1,1", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "", method = RequestMethod.POST)
+ public String add(String files, String users, String auths) {
+ System.out.println("files: " + files + " users: " + users + " auths: " + auths);
+ return ControllerUtils.getResponse(authService.addAuth(files, users, auths));
+ }
+
+ @ApiOperation(value = "获取权限记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "用户", required = true), @ApiImplicitParam(name =
+ "file", value = "文件", required = true), @ApiImplicitParam(name = "offset", value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/all", method = RequestMethod.GET)
+ public String getAuth(String user, String file, int offset) {
+ return Formatter.listToJson(authService.listAuth(user, file, offset));
+ }
+
+ @ApiOperation(value = "更新权限记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "auth", value = "权限值", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+ public String updateAuth(@PathVariable("id") long id, String auth) {
+ return ControllerUtils.getResponse(authService.updateAuth(id, auth));
+ }
+
+ @ApiOperation(value = "批量删除权限记录")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/batch/{ids}", method = RequestMethod.DELETE)
+ public String batchDelete(@PathVariable("ids") String ids) {
+ return ControllerUtils.getResponse(authService.batchDelete(ids));
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/CategoryController.java b/src/main/java/com/mesasoft/cn/web/controller/CategoryController.java
new file mode 100644
index 0000000..41bf74e
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/CategoryController.java
@@ -0,0 +1,75 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.entity.Category;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.ICategoryService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.Checker;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author pantao
+ * @since 2018/1/30
+ */
+@RestController
+@RequestMapping("/category")
+@Api(value = "/category", description = "文件分类相关操作")
+public class CategoryController {
+
+ private final ICategoryService categoryService;
+
+ @Autowired
+ public CategoryController(ICategoryService categoryService) {this.categoryService = categoryService;}
+
+ @ApiOperation(value = "新增一个分类")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{name}", method = RequestMethod.POST)
+ public String add(@PathVariable("name") String name) {
+ return ControllerUtils.getResponse(categoryService.insert(name));
+ }
+
+ @ApiOperation(value = "更新分类名称")
+ @ApiImplicitParam(name = "name", value = "新的名称", required = true)
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+ public String update(@PathVariable("id") int id, String name) {
+ boolean isSuccess = Checker.isNotEmpty(name) && categoryService.update(id, name);
+ return ControllerUtils.getResponse(isSuccess);
+ }
+
+ @ApiOperation(value = "删除一个分类")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+ public String remove(@PathVariable("id") int id) {
+ return ControllerUtils.getResponse(categoryService.remove(id));
+ }
+
+ @ApiOperation(value = "获取一个分类")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET)
+ public String getById(@PathVariable("id") int id) {
+ Category category = categoryService.getById(id);
+ if (Checker.isNull(category)) {
+ return ControllerUtils.getResponse(ValueConsts.FALSE);
+ } else {
+ return category.toString();
+ }
+ }
+
+ @ApiOperation(value = "获取所有分类")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/all", method = RequestMethod.GET)
+ public String getAll() {
+ return Formatter.listToJson(categoryService.list());
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/CommonController.java b/src/main/java/com/mesasoft/cn/web/controller/CommonController.java
new file mode 100644
index 0000000..493de1b
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/CommonController.java
@@ -0,0 +1,94 @@
+package com.mesasoft.cn.web.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.mesasoft.cn.modules.constant.DefaultValues;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.config.SettingConfig;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.ICommonService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.Checker;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * @author pantao
+ * @since 2018/1/23
+ */
+@RestController
+@RequestMapping("/common")
+@Api(value = "/common", description = "公共接口")
+public class CommonController {
+
+ private static Logger logger = LoggerFactory.getLogger(ConfigController.class);
+
+ private final ICommonService commonService;
+
+ private final HttpServletRequest request;
+
+ private final JSONObject jsonObject;
+
+ @Autowired
+ public CommonController(ICommonService commonService, HttpServletRequest request, JSONObject jsonObject) {
+ this.commonService = commonService;
+ this.request = request;
+ this.jsonObject = jsonObject;
+ }
+
+ @ApiOperation(value = "获取头像资源")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/avatar/{name}", method = RequestMethod.GET)
+ public void getAvatar(HttpServletResponse response, @PathVariable("name") String name) throws IOException {
+ String path = SettingConfig.getAvatarStoragePath() + ValueConsts.SEPARATOR + name;
+ ControllerUtils.loadResource(response, path, ValueConsts.FALSE);
+ }
+
+ @ApiOperation(value = "上传头像")
+ @ApiImplicitParam(name = "multipartFile", value = "头像", required = true)
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/avatar", method = RequestMethod.POST)
+ public String avatarUpload(@RequestParam("file") MultipartFile multipartFile) {
+ String name = commonService.uploadAvatar(multipartFile);
+ if (Checker.isEmpty(name)) {
+ jsonObject.put("error", "文件格式不合法");
+ } else {
+ jsonObject.put("success", "/common/avatar/" + name);
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "发送验证码")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/{email}/code", method = RequestMethod.POST)
+ public String sendVerifyCode(@PathVariable("email") String email) {
+ int code = commonService.sendVerifyCode(email);
+ if (code > 0) {
+ request.getSession().setAttribute(DefaultValues.CODE_STRING, code);
+ logger.info("verify code: " + code);
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("status", "error");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "验证验证码是否正确")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/{code}/verification", method = RequestMethod.PUT)
+ public String verifyCode(@PathVariable("code") String code) {
+ boolean isSuccess = Checker.checkNull(code).equals(String.valueOf(request.getSession().getAttribute
+ (DefaultValues.CODE_STRING)));
+ return ControllerUtils.getResponse(isSuccess);
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/ConfigController.java b/src/main/java/com/mesasoft/cn/web/controller/ConfigController.java
new file mode 100644
index 0000000..e13bf35
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/ConfigController.java
@@ -0,0 +1,92 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.SketchApplication;
+import com.mesasoft.cn.modules.constant.DefaultValues;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.entity.User;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IConfigService;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.FileExecutor;
+import com.zhazhapan.util.NetUtils;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiOperation;
+import org.apache.log4j.Logger;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.IOException;
+
+/**
+ * @author pantao
+ * @since 2018/1/22
+ */
+@RestController
+@RequestMapping("/config")
+@Api(value = "/config", description = "配置文件的相关操作")
+public class ConfigController {
+
+ private static Logger logger = Logger.getLogger(ConfigController.class);
+
+ private final IConfigService configService;
+
+ private final HttpServletRequest request;
+
+ @Autowired
+ public ConfigController(IConfigService configService, HttpServletRequest request) {
+ this.configService = configService;
+ this.request = request;
+ }
+
+ @ApiOperation(value = "更新配置文件")
+ @ApiImplicitParam(name = "config", value = "配置文件内容", required = true)
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "", method = RequestMethod.PUT)
+ public String updateConfig(String config) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ if (user.getPermission() > ValueConsts.TWO_INT) {
+ SketchApplication.settings.setJsonObject(config);
+ //打包成jar之后无法修改config.json文件
+ try {
+ FileExecutor.saveFile(NetUtils.urlToString(SketchApplication.class.getResource(DefaultValues
+ .SETTING_PATH)), SketchApplication.settings.toString());
+ } catch (IOException e) {
+ logger.error(e.getMessage());
+ return "{\"message\":\"internal error, cannot save\"}";
+ }
+ return "{\"message\":\"saved successfully\"}";
+ } else {
+ return "{\"message\":\"permission denied\"}";
+ }
+ }
+
+ @ApiOperation(value = "获取配置文件内容")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/all", method = RequestMethod.GET)
+ public String getAll() {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ if (user.getPermission() > ValueConsts.TWO_INT) {
+ return SketchApplication.settings.toString();
+ } else {
+ return "{\"message\":\"permission denied\"}";
+ }
+ }
+
+ @ApiOperation(value = "获取配置文件中的全局相关配置内容")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/global", method = RequestMethod.GET)
+ public String getGlobalConfig() {
+ return configService.getGlobalConfig();
+ }
+
+ @ApiOperation(value = "获取配置文件中的用户相关配置内容")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/user", method = RequestMethod.GET)
+ public String getUserConfig() {
+ return configService.getUserConfig();
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/CustomErrorController.java b/src/main/java/com/mesasoft/cn/web/controller/CustomErrorController.java
new file mode 100644
index 0000000..bc22a1d
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/CustomErrorController.java
@@ -0,0 +1,42 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.boot.web.servlet.error.ErrorController;
+import org.springframework.http.HttpStatus;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.ResponseStatus;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * @author pantao
+ * @since 2018/1/22
+ */
+@Controller
+@Api(description = "错误页面映射")
+public class CustomErrorController implements ErrorController {
+
+ @ApiOperation(value = "异常页面")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping("/exception")
+ public String handleError() {
+ return "error";
+ }
+
+ @ApiOperation(value = "404、错误页面")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping("/error")
+ @ResponseStatus(HttpStatus.NOT_FOUND)
+ public String handleNotFound() {
+ return "/404";
+ }
+
+ @ApiIgnore
+ @Override
+ public String getErrorPath() {
+ return "/error";
+ }
+} \ No newline at end of file
diff --git a/src/main/java/com/mesasoft/cn/web/controller/DownloadedController.java b/src/main/java/com/mesasoft/cn/web/controller/DownloadedController.java
new file mode 100644
index 0000000..324aeaa
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/DownloadedController.java
@@ -0,0 +1,41 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IDownloadedService;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author pantao
+ * @since 2018/2/9
+ */
+@RestController
+@RequestMapping(value = "/downloaded")
+@Api(value = "/downloaded", description = "下载记录相关操作")
+public class DownloadedController {
+
+ private final IDownloadedService downloadService;
+
+ @Autowired
+ public DownloadedController(IDownloadedService downloadService) {
+ this.downloadService = downloadService;
+ }
+
+ @ApiOperation(value = "获取文件下载记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name =
+ "指定文件(默认所有文件)"), @ApiImplicitParam(name = "category", value = "指定分类(默认所有分类)"), @ApiImplicitParam(name =
+ "offset", value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "all", method = RequestMethod.GET)
+ public String getAll(String user, String file, String category, int offset) {
+ return Formatter.listToJson(downloadService.list(user, file, category, offset));
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/FileController.java b/src/main/java/com/mesasoft/cn/web/controller/FileController.java
new file mode 100644
index 0000000..6ae6d57
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/FileController.java
@@ -0,0 +1,220 @@
+package com.mesasoft.cn.web.controller;
+
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.mesasoft.cn.SketchApplication;
+import com.mesasoft.cn.modules.constant.ConfigConsts;
+import com.mesasoft.cn.util.BeanUtils;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.entity.User;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IFileService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.Checker;
+import com.zhazhapan.util.FileExecutor;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * @author pantao
+ * @since 2018/1/29
+ */
+@RestController
+@RequestMapping("/file")
+@Api(value = "/file", description = "文件相关操作")
+public class FileController {
+
+ private final IFileService fileService;
+
+ private final HttpServletRequest request;
+
+ private final JSONObject jsonObject;
+
+ @Autowired
+ public FileController(IFileService fileService, HttpServletRequest request, JSONObject jsonObject) {
+ this.fileService = fileService;
+ this.request = request;
+ this.jsonObject = jsonObject;
+ }
+
+ @ApiOperation(value = "获取我的下载记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
+ "search", value = "记录匹配(允许为空)")})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/user/downloaded", method = RequestMethod.GET)
+ public String getUserDownloaded(int offset, String search) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ return Formatter.listToJson(fileService.listUserDownloaded(user.getId(), offset, search));
+ }
+
+ @ApiOperation(value = "获取我的上传记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
+ "search", value = "记录匹配(允许为空)")})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/user/uploaded", method = RequestMethod.GET)
+ public String getUserUploaded(int offset, String search) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ return Formatter.listToJson(fileService.listUserUploaded(user.getId(), offset, search));
+ }
+
+ @ApiOperation(value = "文件上传")
+ @ApiImplicitParams({@ApiImplicitParam(name = "categoryId", value = "分类ID", required = true), @ApiImplicitParam
+ (name = "tag", value = "文件标签"), @ApiImplicitParam(name = "description", value = "文件描述"),
+ @ApiImplicitParam(name = "prefix", value = "文件前缀(仅适用于管理员上传文件,普通用户无效)")})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "", method = RequestMethod.POST)
+ public String upload(int categoryId, String tag, String description, String prefix, @RequestParam("file")
+ MultipartFile multipartFile) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ return ControllerUtils.getResponse(fileService.upload(categoryId, tag, description, prefix, multipartFile,
+ user));
+ }
+
+ @ApiOperation(value = "获取文件记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "offset", value = "偏移量", required = true), @ApiImplicitParam(name =
+ "categoryId", value = "分类ID", required = true), @ApiImplicitParam(name = "orderBy", value = "排序方式",
+ required = true, example = "id desc"), @ApiImplicitParam(name = "search", value = "记录匹配(允许为空)")})
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/all", method = RequestMethod.GET)
+ public String getAll(int offset, int categoryId, String orderBy, String search) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ boolean canGet = SketchApplication.settings.getBooleanUseEval(ConfigConsts.ANONYMOUS_VISIBLE_OF_SETTING) ||
+ (Checker.isNotNull(user) && user.getIsVisible() == 1);
+ if (canGet) {
+ int userId = Checker.isNull(user) ? 0 : user.getId();
+ return Formatter.listToJson(fileService.listAll(userId, offset, categoryId, orderBy, search));
+ } else {
+ jsonObject.put("error", "权限被限制,无法获取资源,请联系管理员");
+ return jsonObject.toString();
+ }
+ }
+
+ @ApiOperation(value = "删除指定文件")
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/{id}", method = RequestMethod.DELETE)
+ public String removeFile(@PathVariable("id") long id) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("status", "error");
+ if (Checker.isNull(user)) {
+ jsonObject.put("message", "请先登录");
+ } else if (id < 1) {
+ jsonObject.put("message", "格式不合法");
+ } else if (fileService.removeFile(user, id)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "删除失败,权限不够,请联系管理员");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "更新文件属性")
+ @ApiImplicitParams({@ApiImplicitParam(name = "name", value = "文件名", required = true), @ApiImplicitParam(name =
+ "category", value = "分类名称", required = true), @ApiImplicitParam(name = "tag", value = "文件标签", required =
+ true), @ApiImplicitParam(name = "description", value = "文件描述", required = true)})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/{id}", method = RequestMethod.PUT)
+ public String updateFileInfo(@PathVariable("id") long id, String name, String category, String tag, String
+ description) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("status", "error");
+ if (fileService.updateFileInfo(id, user, name, category, tag, description)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "格式不正确或权限不够,更新失败,请联系管理员");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "获取所有文件的基本信息")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name = "file",
+ value = "指定文件(默认所有文件)"), @ApiImplicitParam(name = "category", value = "指定分类(默认所有分类)"), @ApiImplicitParam
+ (name = "offset", value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/basic/all", method = RequestMethod.GET)
+ public String getBasicAll(String user, String file, String category, int offset) {
+ return Formatter.listToJson(fileService.listBasicAll(user, file, category, offset));
+ }
+
+ @ApiOperation(value = "通过文件路径获取服务器端的文件")
+ @ApiImplicitParam(name = "path", value = "文件路径(默认根目录)")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/server", method = RequestMethod.GET)
+ public String getServerFilesByPath(String path) {
+ File[] files = FileExecutor.listFile(Checker.isEmpty(path) ? (Checker.isWindows() ? "C:\\" : "/") : path);
+ JSONArray array = new JSONArray();
+ if (Checker.isNotNull(files)) {
+ for (File file : files) {
+ array.add(BeanUtils.beanToJson(file));
+ }
+ }
+ return array.toJSONString();
+ }
+
+ @ApiOperation("分享服务器端文件")
+ @ApiImplicitParams({@ApiImplicitParam(name = "prefix", value = "自定义前缀(可空)"), @ApiImplicitParam(name = "files",
+ value = "文件", required = true, example = "file1,file2,file3")})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/server/share", method = RequestMethod.POST)
+ public String shareFile(String prefix, String files) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ return ControllerUtils.getResponse(fileService.shareFiles(Checker.checkNull(prefix), files, user));
+ }
+
+ @ApiOperation(value = "更新文件路径(包括本地路径,访问路径,如果新的本地路径和访问路径均为空,这什么也不会做)")
+ @ApiImplicitParams({@ApiImplicitParam(name = "oldLocalUrl", value = "文件本地路径", required = true), @ApiImplicitParam
+ (name = "localUrl", value = "新的本地路径(可空)"), @ApiImplicitParam(name = "visitUrl", value = "新的访问路径(可空)")})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/url", method = RequestMethod.PUT)
+ public String uploadFileUrl(@PathVariable("id") int id, String oldLocalUrl, String localUrl, String visitUrl) {
+ boolean[] b = fileService.updateUrl(id, oldLocalUrl, localUrl, visitUrl);
+ String responseJson = "{status:{localUrl:" + b[0] + ",visitUrl:" + b[1] + "}}";
+ return Formatter.formatJson(responseJson);
+ }
+
+ @ApiOperation(value = "批量删除文件")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/batch/{ids}", method = RequestMethod.DELETE)
+ public String deleteFiles(@PathVariable("ids") String ids) {
+ return ControllerUtils.getResponse(fileService.deleteFiles(ids));
+ }
+
+ @ApiOperation(value = "获取指定文件的权限记录")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/auth", method = RequestMethod.GET)
+ public String getAuth(@PathVariable("id") long id) {
+ return BeanUtils.toPrettyJson(fileService.getAuth(id));
+ }
+
+ @ApiOperation(value = "更新指定文件的权限")
+ @ApiImplicitParam(name = "auth", value = "权限", required = true, example = "1,1,1,1")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/auth", method = RequestMethod.PUT)
+ public String updateAuth(@PathVariable("id") long id, String auth) {
+ return ControllerUtils.getResponse(fileService.updateAuth(id, auth));
+ }
+
+ /**
+ * 资源下载
+ *
+ * @param response {@link HttpServletResponse}
+ */
+ @ApiOperation(value = "通过访问路径获取文件资源")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/**", method = RequestMethod.GET)
+ public void getResource(HttpServletResponse response) throws IOException {
+ ControllerUtils.loadResource(response, fileService.getResource(request.getServletPath(), request),
+ ValueConsts.FALSE);
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/FileMangerController.java b/src/main/java/com/mesasoft/cn/web/controller/FileMangerController.java
new file mode 100644
index 0000000..ca7dbff
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/FileMangerController.java
@@ -0,0 +1,188 @@
+package com.mesasoft.cn.web.controller;
+
+import com.alibaba.fastjson.JSONObject;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IFileManagerService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.ArrayUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import springfox.documentation.annotations.ApiIgnore;
+
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.Map;
+
+/**
+ * <a href="https://github.com/joni2back/angular-filemanager/blob/master/API.md">see api doc</a>
+ *
+ * @author pantao
+ * @since 2018/1/29
+ */
+@ApiIgnore
+@RestController
+@RequestMapping("/filemanager")
+@AuthInterceptor(InterceptorLevel.SYSTEM)
+public class FileMangerController {
+
+ private final IFileManagerService fileManagerService;
+
+ private final JSONObject jsonObject;
+
+ @Autowired
+ public FileMangerController(IFileManagerService fileManagerService, JSONObject jsonObject) {
+ this.fileManagerService = fileManagerService;
+ this.jsonObject = jsonObject;
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/multidownload", method = RequestMethod.GET)
+ public void multiDownload(HttpServletResponse response, String[] items, String toFilename) throws IOException {
+ ControllerUtils.setResponseFileName(response, toFilename);
+ fileManagerService.multiDownload(response, items, toFilename);
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/download", method = RequestMethod.GET)
+ public void download(HttpServletResponse response, String path) throws IOException {
+ ControllerUtils.loadResource(response, path, ValueConsts.TRUE);
+ }
+ public static String getEncoding(String str) {
+ String encode = "GB2312";
+ String finecode = "";
+ try {
+ if (str.equals(new String(str.getBytes(encode), encode))) {
+ finecode = encode;
+ }
+ } catch (Exception exception) {
+ }
+ encode = "ISO-8859-1";
+ try {
+ if (str.equals(new String(str.getBytes(encode), encode))) {
+ finecode = encode;
+ }
+ } catch (Exception exception1) {
+ }
+ encode = "GBK";
+ try {
+ if (str.equals(new String(str.getBytes(encode), encode))) {
+ finecode = encode;
+ }
+ } catch (Exception exception1) {
+ }
+ encode = "UTF-8";
+ try {
+ if (str.equals(new String(str.getBytes(encode), encode))) {
+ finecode = encode;
+ }
+ } catch (Exception exception2) {
+ }
+ encode = "GBK";
+ try {
+ if (str.equals(new String(str.getBytes(encode), encode))) {
+ finecode = encode;
+ }
+ } catch (Exception exception3) {
+ }
+ return finecode;
+ }
+ /**
+ * 暂时没有找到更好的解决方案
+ *
+ * @param destination 目的
+ *
+ * @return 响应结果
+ */
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/upload", method = RequestMethod.POST)
+ public String upload(String destination, MultipartHttpServletRequest request) {
+ Map<String, MultipartFile> fileMap = request.getFileMap();
+ MultipartFile[] files = ArrayUtils.mapToArray(fileMap, MultipartFile.class);
+ jsonObject.put("result", fileManagerService.upload(destination, files));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/extract", method = RequestMethod.POST)
+ public String extract(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.extract(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/compress", method = RequestMethod.POST)
+ public String compress(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.compress(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/permission", method = RequestMethod.POST)
+ public String setPermission(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.setPermission(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/folder", method = RequestMethod.POST)
+ public String createFolder(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.createFolder(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/content", method = RequestMethod.POST)
+ public String getContent(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.getContent(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/edit", method = RequestMethod.POST)
+ public String edit(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.edit(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/remove", method = RequestMethod.POST)
+ public String remove(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.remove(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/copy", method = RequestMethod.POST)
+ public String copy(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.copy(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/move", method = RequestMethod.POST)
+ public String move(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.move(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/rename", method = RequestMethod.POST)
+ public String rename(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.rename(json));
+ return jsonObject.toJSONString();
+ }
+
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/list", method = RequestMethod.POST)
+ public String list(@RequestBody JSONObject json) {
+ jsonObject.put("result", fileManagerService.list(json));
+ return jsonObject.toJSONString();
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/GlobalExceptionHandler.java b/src/main/java/com/mesasoft/cn/web/controller/GlobalExceptionHandler.java
new file mode 100644
index 0000000..e096243
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/GlobalExceptionHandler.java
@@ -0,0 +1,49 @@
+package com.mesasoft.cn.web.controller;
+
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.log.Log;
+import cn.hutool.log.LogFactory;
+import com.mesasoft.cn.entity.Result;
+import com.mesasoft.cn.entity.ResultEntity;
+import com.mesasoft.cn.enums.StatusEnum;
+import com.mesasoft.cn.exception.BusinessException;
+import org.springframework.web.bind.annotation.ExceptionHandler;
+import org.springframework.web.bind.annotation.RestControllerAdvice;
+import org.springframework.web.context.request.async.AsyncRequestTimeoutException;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@RestControllerAdvice
+public class GlobalExceptionHandler {
+ private static final Log log = LogFactory.get();
+
+
+ @ExceptionHandler(AsyncRequestTimeoutException.class) //捕获特定异常
+ public void handleAsyncRequestTimeoutException(AsyncRequestTimeoutException e, HttpServletRequest request) {
+ log.info("Handle Async Request Timeout Exception");
+ }
+
+
+ @ExceptionHandler(Exception.class)
+ public ResultEntity handleException(Exception e, HttpServletRequest request, HttpServletResponse response) {
+ response.setStatus(StatusEnum.FAIL.getStatus());
+ String message = e.getMessage() + (e.getCause() != null ? e.getCause().getMessage() : "");
+ log.error("message:{}, stackTrace:{}", message, getStackTrace(e));
+ return Result.fail(e.getMessage());
+ }
+
+ @ExceptionHandler({BusinessException.class})
+ public ResultEntity handleBusinessException(BusinessException e, HttpServletRequest request, HttpServletResponse response) {
+ response.setStatus(e.getStatus());
+ String message = (e.getMessage() != null ? e.getMessage() : e.getMessage()) + " " + (e.getCause() != null ? e.getCause().getMessage() : "");
+ log.error("message:{}.stackTrace:{}", message, getStackTrace(e));
+ return Result.fail(e.getStatus(), e.getCode(), message);
+ }
+
+ private String getStackTrace(Exception e) {
+ return ObjectUtil.isNotNull(e.getStackTrace()) ? e.getStackTrace()[0].toString() : "";
+ }
+
+
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/UploadedController.java b/src/main/java/com/mesasoft/cn/web/controller/UploadedController.java
new file mode 100644
index 0000000..a99827f
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/UploadedController.java
@@ -0,0 +1,39 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IUploadedService;
+import com.zhazhapan.util.Formatter;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * @author pantao
+ * @since 2018/2/28
+ */
+@RestController
+@RequestMapping(value = "/uploaded")
+@Api(value = "/uploaded", description = "上传记录相关操作")
+public class UploadedController {
+
+ private final IUploadedService uploadedService;
+
+ @Autowired
+ public UploadedController(IUploadedService uploadedService) {this.uploadedService = uploadedService;}
+
+ @ApiOperation(value = "获取文件上传记录")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name =
+ "指定文件(默认所有文件)"), @ApiImplicitParam(name = "category", value = "指定分类(默认所有分类)"), @ApiImplicitParam(name =
+ "offset", value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "all", method = RequestMethod.GET)
+ public String getAll(String user, String file, String category, int offset) {
+ return Formatter.listToJson(uploadedService.list(user, file, category, offset));
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/UserController.java b/src/main/java/com/mesasoft/cn/web/controller/UserController.java
new file mode 100644
index 0000000..a76aad9
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/UserController.java
@@ -0,0 +1,281 @@
+package com.mesasoft.cn.web.controller;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONObject;
+import com.mesasoft.cn.SketchApplication;
+import com.mesasoft.cn.modules.constant.ConfigConsts;
+import com.mesasoft.cn.modules.constant.DefaultValues;
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.config.TokenConfig;
+import com.mesasoft.cn.entity.Result;
+import com.mesasoft.cn.entity.ResultEntity;
+import com.mesasoft.cn.entity.User;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import com.mesasoft.cn.service.IUserService;
+import com.mesasoft.cn.util.ControllerUtils;
+import com.zhazhapan.modules.constant.ValueConsts;
+import com.zhazhapan.util.Checker;
+import com.zhazhapan.util.Formatter;
+import com.zhazhapan.util.encryption.JavaEncrypt;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiImplicitParam;
+import io.swagger.annotations.ApiImplicitParams;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.servlet.http.HttpServletRequest;
+import java.io.UnsupportedEncodingException;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author pantao
+ * @since 2018/1/22
+ */
+@RestController
+@RequestMapping("/user")
+@Api(value = "/user", description = "用户相关操作")
+public class UserController {
+
+ private final IUserService userService;
+
+ private final HttpServletRequest request;
+
+ private final JSONObject jsonObject;
+
+ @Autowired
+ public UserController(IUserService userService, HttpServletRequest request, JSONObject jsonObject) {
+ this.userService = userService;
+ this.request = request;
+ this.jsonObject = jsonObject;
+ }
+
+ @ApiOperation(value = "更新用户权限(注:不是文件权限)")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/{permission}", method = RequestMethod.PUT)
+ public String updatePermission(@PathVariable("id") int id, @PathVariable("permission") int permission) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ if (user.getPermission() < ValueConsts.THREE_INT && permission > 1) {
+ jsonObject.put("message", "权限不够,设置失败");
+ } else if (userService.updatePermission(id, permission)) {
+ jsonObject.put("message", "更新成功");
+ } else {
+ jsonObject.put("message", "更新失败,请稍后重新尝试");
+ }
+ return jsonObject.toJSONString();
+ }
+
+ @ApiOperation("重置用户密码(管理员接口)")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/reset/{id}/{password}", method = RequestMethod.PUT)
+ public String resetPassword(@PathVariable("id") int id, @PathVariable("password") String password) {
+ return ControllerUtils.getResponse(userService.resetPassword(id, password));
+ }
+
+ @ApiOperation(value = "更新用户的默认文件权限")
+ @ApiImplicitParam(name = "auth", value = "权限", example = "1,1,1,1", required = true)
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/{id}/auth", method = RequestMethod.PUT)
+ public String updateFileAuth(@PathVariable("id") int id, String auth) {
+ return ControllerUtils.getResponse(userService.updateFileAuth(id, auth));
+ }
+
+ @ApiOperation(value = "获取所有用户")
+ @ApiImplicitParams({@ApiImplicitParam(name = "user", value = "指定用户(默认所有用户)"), @ApiImplicitParam(name = "offset",
+ value = "偏移量", required = true)})
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/all", method = RequestMethod.GET)
+ public String getUser(String user, int offset) {
+ User u = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ return Formatter.listToJson(userService.listUser(u.getPermission(), user, offset));
+ }
+
+ @ApiOperation(value = "更新我的基本信息")
+ @ApiImplicitParams({@ApiImplicitParam(name = "avatar", value = "头像(可空)"), @ApiImplicitParam(name = "realName",
+ value = "真实姓名(可空)"), @ApiImplicitParam(name = "email", value = "邮箱(可空)"), @ApiImplicitParam(name =
+ "code", value = "验证码(可空)")})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/info", method = RequestMethod.PUT)
+ public String updateBasicInfo(String avatar, String realName, String email, String code) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("message", "保存成功");
+ boolean emilVerify = SketchApplication.settings.getBooleanUseEval(ConfigConsts.EMAIL_VERIFY_OF_SETTINGS);
+ if (Checker.isNotEmpty(email) && !email.equals(user.getEmail())) {
+ if (!emilVerify || isCodeValidate(code)) {
+ if (userService.emailExists(email)) {
+ jsonObject.put("message", "邮箱更新失败,该邮箱已经存在");
+ } else {
+ user.setEmail(email);
+ }
+ } else {
+ jsonObject.put("message", "邮箱更新失败,验证码校验失败");
+ }
+ }
+ if (userService.updateBasicInfoById(user.getId(), avatar, realName, user.getEmail())) {
+ user.setAvatar(avatar);
+ user.setRealName(realName);
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "服务器发生错误,请稍后重新尝试");
+ }
+ jsonObject.put("email", user.getEmail());
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "更新我的密码")
+ @ApiImplicitParams({@ApiImplicitParam(name = "oldPassword", value = "原密码", required = true), @ApiImplicitParam
+ (name = "newPassword", value = "新密码", required = true)})
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/password", method = RequestMethod.PUT)
+ public String updatePassword(String oldPassword, String newPassword) {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ jsonObject.put("status", "error");
+ try {
+ if (user.getPassword().equals(JavaEncrypt.sha256(oldPassword))) {
+ if (userService.updatePasswordById(newPassword, user.getId())) {
+ jsonObject.put("status", "success");
+ TokenConfig.removeTokenByValue(user.getId());
+ } else {
+ jsonObject.put("message", "新密码格式不正确");
+ }
+ } else {
+ jsonObject.put("message", "原密码不正确");
+ }
+ } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
+ jsonObject.put("message", "服务器内部错误,请稍后重新尝试");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "获取我的基本信息")
+ @AuthInterceptor(InterceptorLevel.USER)
+ @RequestMapping(value = "/info", method = RequestMethod.GET)
+ public String getInfo() {
+ User user = (User) request.getSession().getAttribute(ValueConsts.USER_STRING);
+ JSONObject object = JSON.parseObject(user.toString());
+ object.remove(ValueConsts.ID_STRING);
+ object.remove(ValueConsts.PASSWORD_STRING);
+ return object.toString();
+ }
+
+ @ApiOperation(value = "登录(用户名密码和token必须有一个输入)")
+ @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名"), @ApiImplicitParam(name
+ = "password", value = "密码"), @ApiImplicitParam(name = "auto", value = "是否自动登录", dataType = "Boolean"),
+ @ApiImplicitParam(name = "token", value = "用于自动登录")})
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/login", method = RequestMethod.PUT)
+ public String login(String username, String password, boolean auto, String token) {
+ //使用密码登录
+ User user = userService.login(username, password, ValueConsts.NULL_STRING, ValueConsts.NULL_RESPONSE);
+ if (Checker.isNull(user) || user.getPermission() < 1) {
+ jsonObject.put("status", "failed");
+ } else {
+ request.getSession().setAttribute(ValueConsts.USER_STRING, user);
+ jsonObject.put("status", "success");
+ if (auto) {
+ jsonObject.put("token", TokenConfig.generateToken(token, user.getId()));
+ } else {
+ jsonObject.put("token", "");
+ TokenConfig.removeTokenByValue(user.getId());
+ }
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "用户注册(当不需要验证邮箱时,邮箱和验证码可空)")
+ @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名", required = true), @ApiImplicitParam(name
+ = "email", value = "邮箱"), @ApiImplicitParam(name = "password", value = "密码", required = true),
+ @ApiImplicitParam(name = "code", value = "验证码")})
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/register", method = RequestMethod.POST)
+ public String register(String username, String email, String password, String code) {
+ boolean emilVerify = SketchApplication.settings.getBooleanUseEval(ConfigConsts.EMAIL_VERIFY_OF_SETTINGS);
+ jsonObject.put("status", "error");
+ if (!emilVerify || isCodeValidate(code)) {
+ if (userService.usernameExists(username)) {
+ jsonObject.put("message", "用户名已经存在");
+ } else if (userService.emailExists(email)) {
+ jsonObject.put("message", "该邮箱已经被注册啦");
+ } else if (userService.register(username, email, password)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "数据格式不合法");
+ }
+ } else {
+ jsonObject.put("message", "验证码校验失败");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "重置我的密码")
+ @ApiImplicitParams({@ApiImplicitParam(name = "email", value = "邮箱", required = true), @ApiImplicitParam(name =
+ "code", value = "验证码", required = true), @ApiImplicitParam(name = "password", value = "密码", required =
+ true)})
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/password/reset", method = RequestMethod.PUT)
+ public String resetPassword(String email, String code, String password) {
+ jsonObject.put("status", "error");
+ if (isCodeValidate(code)) {
+ if (userService.resetPasswordByEmail(email, password)) {
+ jsonObject.put("status", "success");
+ } else {
+ jsonObject.put("message", "格式不合法");
+ }
+ } else {
+ jsonObject.put("message", "验证码校验失败");
+ }
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "检测用户名是否已经注册")
+ @ApiImplicitParam(name = "username", value = "用户名", required = true)
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/username/exists", method = RequestMethod.GET)
+ public String usernameExists(String username) {
+ jsonObject.put("exists", userService.usernameExists(username));
+ return jsonObject.toString();
+ }
+
+ @ApiOperation(value = "检测邮箱是否已经注册")
+ @ApiImplicitParam(name = "email", value = "邮箱", required = true)
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/email/exists", method = RequestMethod.GET)
+ public String emailExists(String email) {
+ jsonObject.put("exists", userService.emailExists(email));
+ return jsonObject.toString();
+ }
+
+ private boolean isCodeValidate(String code) {
+ return Checker.checkNull(code).equals(String.valueOf(request.getSession().getAttribute(DefaultValues
+ .CODE_STRING)));
+ }
+
+
+ @ApiOperation(value = "登录(用户名密码和token必须有一个输入)")
+ @ApiImplicitParams({@ApiImplicitParam(name = "username", value = "用户名"), @ApiImplicitParam(name
+ = "password", value = "密码"), @ApiImplicitParam(name = "auto", value = "是否自动登录", dataType = "Boolean"),
+ @ApiImplicitParam(name = "token", value = "用于自动登录")})
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/login2", method = RequestMethod.PUT)
+ public ResultEntity login2(String username, String password, boolean auto, String token) {
+
+ JSONObject resultObject = null;
+ //使用密码登录
+ User user = userService.login(username, password, ValueConsts.NULL_STRING, ValueConsts.NULL_RESPONSE);
+ if (Checker.isNull(user) || user.getPermission() < 1) {
+ return Result.fail();
+ } else {
+ request.getSession().setAttribute(ValueConsts.USER_STRING, user);
+ if (auto) {
+ resultObject.put("token", TokenConfig.generateToken(token, user.getId()));
+ } else {
+ resultObject.put("token", "");
+ TokenConfig.removeTokenByValue(user.getId());
+ }
+ }
+ return Result.success(resultObject);
+ }
+}
diff --git a/src/main/java/com/mesasoft/cn/web/controller/ViewController.java b/src/main/java/com/mesasoft/cn/web/controller/ViewController.java
new file mode 100644
index 0000000..33ad670
--- /dev/null
+++ b/src/main/java/com/mesasoft/cn/web/controller/ViewController.java
@@ -0,0 +1,63 @@
+package com.mesasoft.cn.web.controller;
+
+import com.mesasoft.cn.annotation.AuthInterceptor;
+import com.mesasoft.cn.enums.InterceptorLevel;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.ResponseBody;
+import springfox.documentation.annotations.ApiIgnore;
+
+/**
+ * @author pantao
+ * @since 2018/1/25
+ */
+@Controller
+@Api(description = "视图页面映射")
+public class ViewController {
+
+ @ApiOperation(value = "远程文件管理页面")
+ @AuthInterceptor(InterceptorLevel.SYSTEM)
+ @RequestMapping(value = "/filemanager", method = RequestMethod.GET)
+ public String fileManager() {
+ return "/filemanager";
+ }
+
+ @ApiOperation(value = "上传页面")
+ @AuthInterceptor
+ @RequestMapping(value = "/upload", method = RequestMethod.GET)
+ public String upload() {
+ return "/upload";
+ }
+
+ @ApiOperation(value = "首页")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/index", method = RequestMethod.GET)
+ public String index() {
+ return "/index";
+ }
+
+ @ApiOperation(value = "登录、注册、忘记密码页面")
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/signin", method = RequestMethod.GET)
+ public String signin() {
+ return "/signin";
+ }
+
+ @ApiOperation(value = "管理员页面")
+ @AuthInterceptor(InterceptorLevel.ADMIN)
+ @RequestMapping(value = "/admin", method = RequestMethod.GET)
+ public String admin() {
+ return "/admin";
+ }
+
+ @ApiIgnore
+ @AuthInterceptor(InterceptorLevel.NONE)
+ @RequestMapping(value = "/test", method = RequestMethod.GET)
+ @ResponseBody
+ public String test() {
+ return "<b>test</b>";
+ }
+}