1、后台接口优化
2、登录优化
@ -28,11 +28,4 @@ public class FileApplication {
|
||||
return new RestTemplate();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public WebServerFactoryCustomizer<ConfigurableWebServerFactory> webServerFactoryCustomizer(){
|
||||
return factory -> {
|
||||
ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/index.html");
|
||||
factory.addErrorPages(error404Page);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
@ -1,45 +0,0 @@
|
||||
package com.mac.scp.config.redis;
|
||||
|
||||
import org.springframework.cache.CacheManager;
|
||||
import org.springframework.cache.annotation.CachingConfigurerSupport;
|
||||
import org.springframework.cache.annotation.EnableCaching;
|
||||
import org.springframework.cache.interceptor.KeyGenerator;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.cache.RedisCacheConfiguration;
|
||||
import org.springframework.data.redis.cache.RedisCacheManager;
|
||||
import org.springframework.data.redis.cache.RedisCacheWriter;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
|
||||
import java.lang.reflect.Method;
|
||||
import java.time.Duration;
|
||||
|
||||
@Configuration
|
||||
@EnableCaching
|
||||
public class RedisConfig extends CachingConfigurerSupport {
|
||||
|
||||
@Bean
|
||||
public KeyGenerator keyGenerator() {
|
||||
return new KeyGenerator() {
|
||||
@Override
|
||||
public Object generate(Object target, Method method, Object... params) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
sb.append(target.getClass().getName());
|
||||
sb.append(method.getName());
|
||||
for (Object obj : params) {
|
||||
sb.append(obj.toString());
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
@Bean
|
||||
public CacheManager cacheManager(RedisConnectionFactory redisConnectionFactory) {
|
||||
RedisCacheConfiguration redisCacheConfiguration = RedisCacheConfiguration.defaultCacheConfig()
|
||||
.entryTtl(Duration.ofHours(1)); // 设置缓存有效期一小时
|
||||
return RedisCacheManager
|
||||
.builder(RedisCacheWriter.nonLockingRedisCacheWriter(redisConnectionFactory))
|
||||
.cacheDefaults(redisCacheConfiguration).build();
|
||||
}
|
||||
}
|
@ -10,9 +10,7 @@ import com.mac.scp.api.IFileService;
|
||||
import com.mac.scp.api.IFiletransferService;
|
||||
import com.mac.scp.domain.*;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -51,12 +49,11 @@ public class FileController {
|
||||
/**
|
||||
* 创建文件
|
||||
*
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/createfile")
|
||||
@RequestMapping(value = "/createfile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RestResult<String> createFile(FileBean fileBean) {
|
||||
public RestResult<String> createFile(@RequestBody FileBean fileBean) {
|
||||
RestResult<String> restResult = new RestResult<>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
return operationCheck();
|
||||
@ -72,14 +69,14 @@ public class FileController {
|
||||
return restResult;
|
||||
}
|
||||
|
||||
@RequestMapping("/getfilelist")
|
||||
@RequestMapping(value = "/getfilelist", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public RestResult<List<FileBean>> getFileList(FileBean fileBean){
|
||||
RestResult<List<FileBean>> restResult = new RestResult<>();
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
if(isShareFile){
|
||||
fileBean.setUserid(2);
|
||||
}else {
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
fileBean.setUserid(sessionUserBean.getUserId());
|
||||
}
|
||||
|
||||
@ -106,12 +103,12 @@ public class FileController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/batchdeletefile")
|
||||
@RequestMapping(value = "/batchdeletefile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String deleteImageByIds(String files) {
|
||||
public RestResult<String> deleteImageByIds(@RequestBody String files) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
return JSON.toJSONString(operationCheck());
|
||||
if (!operationCheck().isSuccess()) {
|
||||
return operationCheck();
|
||||
}
|
||||
|
||||
List<FileBean> fileList = JSON.parseArray(files, FileBean.class);
|
||||
@ -122,8 +119,7 @@ public class FileController {
|
||||
|
||||
result.setData("批量删除文件成功");
|
||||
result.setSuccess(true);
|
||||
String resultJson = JSON.toJSONString(result);
|
||||
return resultJson;
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -131,9 +127,9 @@ public class FileController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/deletefile")
|
||||
@RequestMapping(value = "/deletefile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String deleteFile(FileBean fileBean) {
|
||||
public String deleteFile(@RequestBody FileBean fileBean) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
return JSON.toJSONString(operationCheck());
|
||||
@ -151,9 +147,9 @@ public class FileController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/unzipfile")
|
||||
@RequestMapping(value = "/unzipfile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String unzipFile(FileBean fileBean){
|
||||
public String unzipFile(@RequestBody FileBean fileBean) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
return JSON.toJSONString(operationCheck());
|
||||
@ -203,18 +199,21 @@ public class FileController {
|
||||
|
||||
/**
|
||||
* 文件移动
|
||||
* @param oldfilepath 源路径
|
||||
* @param newfilepath 目的路径
|
||||
* @param filename 文件名
|
||||
*
|
||||
*
|
||||
* @return 返回前台移动结果
|
||||
*/
|
||||
@RequestMapping("/movefile")
|
||||
@RequestMapping(value = "/movefile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RestResult<String> moveFile(String oldfilepath, String newfilepath, String filename, String extendname){
|
||||
public RestResult<String> moveFile(@RequestBody FileBean fileBean) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
return operationCheck();
|
||||
}
|
||||
String oldfilepath = fileBean.getOldfilepath();
|
||||
String newfilepath = fileBean.getNewfilepath();
|
||||
String filename = fileBean.getFilename();
|
||||
String extendname = fileBean.getExtendname();
|
||||
|
||||
fileService.updateFilepathByFilepath(oldfilepath, newfilepath, filename, extendname);
|
||||
result.setSuccess(true);
|
||||
@ -223,23 +222,26 @@ public class FileController {
|
||||
|
||||
/**
|
||||
* 批量移动文件
|
||||
* @param newfilepath 目的路径
|
||||
* @param files 需要移动的文件列表
|
||||
*
|
||||
*
|
||||
* @return 返回前台移动结果
|
||||
*/
|
||||
@RequestMapping("/batchmovefile")
|
||||
@RequestMapping(value = "/batchmovefile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RestResult<String> batchMoveFile(String newfilepath, String files){
|
||||
public RestResult<String> batchMoveFile(@RequestBody FileBean fileBean) {
|
||||
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
if (!operationCheck().isSuccess()){
|
||||
if (!operationCheck().isSuccess()) {
|
||||
return operationCheck();
|
||||
}
|
||||
|
||||
String files = fileBean.getFiles();
|
||||
String newfilepath = fileBean.getNewfilepath();
|
||||
|
||||
List<FileBean> fileList = JSON.parseArray(files, FileBean.class);
|
||||
|
||||
for (FileBean fileBean : fileList) {
|
||||
fileService.updateFilepathByFilepath(fileBean.getFilepath(), newfilepath, fileBean.getFilename(), fileBean.getExtendname());
|
||||
for (FileBean file : fileList) {
|
||||
fileService.updateFilepathByFilepath(file.getFilepath(), newfilepath, file.getFilename(), file.getExtendname());
|
||||
}
|
||||
|
||||
result.setData("批量移动文件成功");
|
||||
@ -271,9 +273,9 @@ public class FileController {
|
||||
* @param fileType 文件类型
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/selectfilebyfiletype")
|
||||
@RequestMapping(value = "/selectfilebyfiletype", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public RestResult<List<FileBean>> selectFileByFileType(int fileType){
|
||||
public RestResult<List<FileBean>> selectFileByFileType(@RequestParam int fileType) {
|
||||
RestResult<List<FileBean>> result = new RestResult<List<FileBean>>();
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
long userid = sessionUserBean.getUserId();
|
||||
@ -290,7 +292,7 @@ public class FileController {
|
||||
* 获取文件树
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/getfiletree")
|
||||
@RequestMapping(value = "/getfiletree", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public RestResult<TreeNode> getFileTree(){
|
||||
RestResult<TreeNode> result = new RestResult<TreeNode>();
|
||||
|
@ -9,9 +9,7 @@ import com.mac.scp.api.IFileService;
|
||||
import com.mac.scp.api.IFiletransferService;
|
||||
import com.mac.scp.domain.*;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -29,55 +27,17 @@ public class FiletransferController {
|
||||
@Resource
|
||||
IFileService fileService;
|
||||
|
||||
/**
|
||||
* 删除用户头像
|
||||
*
|
||||
* @param request 请求
|
||||
* @return 删除结果
|
||||
*/
|
||||
@RequestMapping("/deleteuserimage")
|
||||
@ResponseBody
|
||||
public String deleteUserImage(HttpServletRequest request, UserImageBean userImageBean) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
String servletPath = request.getServletPath();
|
||||
String realPath = request.getSession().getServletContext().getRealPath(servletPath);
|
||||
|
||||
List<UserImageBean> userImageList = filetransferService.selectUserImageByUrl(userImageBean.getImageurl().replace("filetransfer/", ""));
|
||||
if (userImageList.size() <= 0) {
|
||||
result.setSuccess(false);
|
||||
result.setErrorMessage("文件路径不正确");
|
||||
return JSON.toJSONString(result);
|
||||
}
|
||||
String fileRealPath = new File(new File(realPath).getParent()).getParent() + "/" + userImageBean.getImageurl();
|
||||
File file = new File(fileRealPath);
|
||||
filetransferService.deleteUserImageById(userImageBean);
|
||||
|
||||
if (file.isFile() && file.exists()) {
|
||||
boolean isDeleteSuccess = file.delete();
|
||||
if (isDeleteSuccess) {
|
||||
result.setSuccess(true);
|
||||
} else {
|
||||
result.setSuccess(false);
|
||||
result.setErrorMessage("文件删除失败");
|
||||
}
|
||||
} else {
|
||||
result.setSuccess(true);
|
||||
result.setErrorMessage("文件不存在");
|
||||
}
|
||||
|
||||
String resultJson = JSON.toJSONString(result);
|
||||
return resultJson;
|
||||
}
|
||||
|
||||
/**
|
||||
* 旋转图片
|
||||
*
|
||||
* @param direction 方向
|
||||
* @param imageid 图片id
|
||||
* @param imageid 图片id
|
||||
* @return 返回结果
|
||||
*/
|
||||
@RequestMapping("/totationimage")
|
||||
@RequestMapping(value = "/totationimage", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RestResult<String> totationImage(String direction, int imageid){
|
||||
public RestResult<String> totationImage(@RequestBody String direction, @RequestBody int imageid) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
FileBean fileBean = new FileBean();
|
||||
fileBean.setFileid(imageid);
|
||||
@ -110,9 +70,9 @@ public class FiletransferController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/deleteimagebyids")
|
||||
@RequestMapping(value = "/deleteimagebyids", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String deleteImageByIds(String imageids) {
|
||||
public String deleteImageByIds(@RequestBody String imageids) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
List<Integer> imageidList = JSON.parseArray(imageids, Integer.class);
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
@ -154,9 +114,9 @@ public class FiletransferController {
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/deleteimage")
|
||||
@RequestMapping(value = "/deleteimage", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String deleteImage(HttpServletRequest request, FileBean fileBean) {
|
||||
public String deleteImage(HttpServletRequest request, @RequestBody FileBean fileBean) {
|
||||
RestResult<String> result = new RestResult<String>();
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
long sessionUserId = sessionUserBean.getUserId();
|
||||
@ -186,15 +146,13 @@ public class FiletransferController {
|
||||
return resultJson;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 上传头像
|
||||
*
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/uploadimg")
|
||||
@RequestMapping(value = "/uploadimg", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String uploadImg(HttpServletRequest request) {
|
||||
RestResult<String> restResult = filetransferService.uploadUserImage(request);
|
||||
@ -208,7 +166,7 @@ public class FiletransferController {
|
||||
* @param request
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/uploadfile")
|
||||
@RequestMapping(value = "/uploadfile", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String uploadFile(HttpServletRequest request, FileBean fileBean) {
|
||||
RestResult<String> restResult = new RestResult<String>();
|
||||
@ -231,9 +189,9 @@ public class FiletransferController {
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/downloadfile")
|
||||
public String downloadFile(HttpServletResponse response, FileBean fileBean){
|
||||
RestResult<String> restResult = new RestResult<>();
|
||||
@RequestMapping(value = "/downloadfile", method = RequestMethod.GET)
|
||||
public String downloadFile(HttpServletResponse response, FileBean fileBean) {
|
||||
RestResult<String> restResult = new RestResult<>();
|
||||
String fileName = null;// 文件名
|
||||
try {
|
||||
fileName = new String(fileBean.getFilename().getBytes("utf-8"), "ISO-8859-1");
|
||||
@ -284,27 +242,13 @@ public class FiletransferController {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 得到用户头像列表
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/getuploadimglist")
|
||||
@ResponseBody
|
||||
public RestResult<List<UserImageBean>> getUploadImgList(HttpServletRequest request) {
|
||||
UserBean sessionUserBean = (UserBean) SecurityUtils.getSubject().getPrincipal();
|
||||
RestResult<List<UserImageBean>> restResult = filetransferService.selectUserImage(sessionUserBean.getUserId());
|
||||
restResult.setSuccess(true);
|
||||
|
||||
return restResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取存储信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping("/getstorage")
|
||||
@RequestMapping(value = "/getstorage", method = RequestMethod.GET)
|
||||
@ResponseBody
|
||||
public RestResult<StorageBean> getStorage() {
|
||||
RestResult<StorageBean> restResult = new RestResult<StorageBean>();
|
||||
|
@ -12,10 +12,7 @@ import com.mac.scp.domain.Role;
|
||||
import com.mac.scp.domain.UserBean;
|
||||
import org.apache.shiro.SecurityUtils;
|
||||
import org.apache.shiro.authc.UsernamePasswordToken;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.ResponseBody;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
@ -60,15 +57,14 @@ public class UserController {
|
||||
return mv;
|
||||
}
|
||||
|
||||
@RequestMapping("/adduser")
|
||||
@RequestMapping(value = "/adduser", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public String addUser(UserBean userBean) {
|
||||
public RestResult<String> addUser(@RequestBody UserBean userBean) {
|
||||
RestResult<String> result = userService.registerUser(userBean);
|
||||
|
||||
String resultJson = JSON.toJSONString(result);
|
||||
return resultJson;
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
|
||||
/**
|
||||
@ -101,6 +97,23 @@ public class UserController {
|
||||
return restResult;
|
||||
}
|
||||
|
||||
/**
|
||||
* 用户注销
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@RequestMapping(value = "/userlogout", method = RequestMethod.POST)
|
||||
@ResponseBody
|
||||
public RestResult<String> userLogout() {
|
||||
RestResult<String> restResult = new RestResult<String>();
|
||||
|
||||
SecurityUtils.getSubject().logout();
|
||||
restResult.setSuccess(true);
|
||||
restResult.setData("注销登录成功!");
|
||||
|
||||
return restResult;
|
||||
}
|
||||
|
||||
/* 检查用户登录信息
|
||||
*
|
||||
* @return
|
||||
|
@ -3,7 +3,7 @@ package com.mac.scp.domain;
|
||||
import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* 相册实体类
|
||||
* 文件实体类
|
||||
*
|
||||
* @author ma116
|
||||
*/
|
||||
@ -11,32 +11,99 @@ import javax.persistence.*;
|
||||
@UniqueConstraint(name = "fileindex", columnNames = {"filename", "filepath", "extendname"})})
|
||||
@Entity
|
||||
public class FileBean {
|
||||
/**
|
||||
* 文件id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long fileid;
|
||||
|
||||
/**
|
||||
* 相册id
|
||||
*/
|
||||
private long albumid;
|
||||
|
||||
/**
|
||||
* 文章id
|
||||
*/
|
||||
private long essayid;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private long userid;
|
||||
|
||||
/**
|
||||
* 文件URL
|
||||
*/
|
||||
private String fileurl;
|
||||
|
||||
/**
|
||||
* 文件路径
|
||||
*/
|
||||
private String filepath;
|
||||
|
||||
/**
|
||||
* 上传时间
|
||||
*/
|
||||
private String uploadtime;
|
||||
|
||||
/**
|
||||
* 时间戳名称
|
||||
*/
|
||||
private String timestampname;
|
||||
|
||||
/**
|
||||
* 扩展名
|
||||
*/
|
||||
private String extendname;
|
||||
|
||||
/**
|
||||
* 文件名
|
||||
*/
|
||||
private String filename;
|
||||
|
||||
/**
|
||||
* 文件大小
|
||||
*/
|
||||
private long filesize;
|
||||
|
||||
/**
|
||||
* 是否是目录
|
||||
*/
|
||||
private int isdir;
|
||||
|
||||
@Transient
|
||||
private String oldfilepath;
|
||||
@Transient
|
||||
private String newfilepath;
|
||||
@Transient
|
||||
private String files;
|
||||
|
||||
public String getOldfilepath() {
|
||||
return oldfilepath;
|
||||
}
|
||||
|
||||
public void setOldfilepath(String oldfilepath) {
|
||||
this.oldfilepath = oldfilepath;
|
||||
}
|
||||
|
||||
public String getNewfilepath() {
|
||||
return newfilepath;
|
||||
}
|
||||
|
||||
public void setNewfilepath(String newfilepath) {
|
||||
this.newfilepath = newfilepath;
|
||||
}
|
||||
|
||||
public String getFiles() {
|
||||
return files;
|
||||
}
|
||||
|
||||
public void setFiles(String files) {
|
||||
this.files = files;
|
||||
}
|
||||
|
||||
public long getAlbumid() {
|
||||
return albumid;
|
||||
}
|
||||
|
@ -1,30 +1,64 @@
|
||||
package com.mac.scp.domain;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 权限实体类
|
||||
*/
|
||||
@Table(name = "permission")
|
||||
@Entity
|
||||
public class Permission {
|
||||
/**
|
||||
* 权限id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long permissionid;//主键.
|
||||
/**
|
||||
* 权限名称
|
||||
*/
|
||||
@Column
|
||||
private String name;//名称.
|
||||
|
||||
/**
|
||||
* 资源类型
|
||||
*/
|
||||
@Column
|
||||
private String resourceType;//资源类型,[menu|button]
|
||||
|
||||
/**
|
||||
* 资源路径
|
||||
*/
|
||||
@Column
|
||||
private String url;//资源路径.
|
||||
/**
|
||||
* 权限字符串,menu例子:role:*,button例子:role:create,role:update,role:delete,role:view
|
||||
*/
|
||||
@Column
|
||||
private String permission; //权限字符串,menu例子:role:*,button例子:role:create,role:update,role:delete,role:view
|
||||
private String permission;
|
||||
|
||||
/**
|
||||
* 父编号
|
||||
*/
|
||||
@Column
|
||||
private Long parentId; //父编号
|
||||
private Long parentId;
|
||||
|
||||
/**
|
||||
* 父编号列表
|
||||
*/
|
||||
@Column
|
||||
private String parentIds; //父编号列表
|
||||
private String parentIds;
|
||||
|
||||
/**
|
||||
* 是否生效
|
||||
*/
|
||||
@Column
|
||||
private Boolean available = Boolean.FALSE;
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*/
|
||||
@Transient
|
||||
private List<Role> roles;
|
||||
|
||||
|
@ -3,19 +3,37 @@ package com.mac.scp.domain;
|
||||
import javax.persistence.*;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 角色实体信息类
|
||||
*/
|
||||
@Table(name = "role")
|
||||
@Entity
|
||||
public class Role {
|
||||
/**
|
||||
* 角色id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long roleid; // 编号
|
||||
|
||||
/**
|
||||
* 角色名
|
||||
*/
|
||||
private String role; // 角色标识程序中判断使用,如"admin",这个是唯一的:
|
||||
|
||||
/**
|
||||
* 角色描述
|
||||
*/
|
||||
private String description; // 角色描述,UI界面显示使用
|
||||
|
||||
/**
|
||||
* 是否可用
|
||||
*/
|
||||
private Boolean available = Boolean.FALSE; // 是否可用,如果不可用将不会添加给用户
|
||||
|
||||
/**
|
||||
* 权限列表
|
||||
*/
|
||||
@ManyToMany(fetch = FetchType.EAGER)//立即从数据库中进行加载数据
|
||||
@JoinTable(name = "role_permission",
|
||||
joinColumns = {@JoinColumn(name = "roleid")},
|
||||
|
@ -2,15 +2,27 @@ package com.mac.scp.domain;
|
||||
|
||||
import javax.persistence.*;
|
||||
|
||||
/**
|
||||
* 存储信息类
|
||||
*/
|
||||
@Table(name = "storage")
|
||||
@Entity
|
||||
public class StorageBean {
|
||||
/**
|
||||
* 存储id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long storageid;
|
||||
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
private long userid;
|
||||
|
||||
/**
|
||||
* 存储大小
|
||||
*/
|
||||
private long storagesize;
|
||||
|
||||
public StorageBean() {
|
||||
|
@ -9,11 +9,30 @@ import java.util.Map;
|
||||
* 树节点
|
||||
*/
|
||||
public class TreeNode {
|
||||
/**
|
||||
* 节点id
|
||||
*/
|
||||
private long id;
|
||||
/**
|
||||
* 节点名
|
||||
*/
|
||||
private String label;
|
||||
/**
|
||||
* 深度
|
||||
*/
|
||||
private int depth;
|
||||
/**
|
||||
* 是否被关闭
|
||||
*/
|
||||
private String state = "closed";
|
||||
|
||||
/**
|
||||
* 属性集合
|
||||
*/
|
||||
private Map<String, String> attributes = new HashMap<>();
|
||||
/**
|
||||
* 子节点列表
|
||||
*/
|
||||
private List<TreeNode> children = new ArrayList<>();
|
||||
|
||||
public long getId() {
|
||||
|
@ -1,10 +1,8 @@
|
||||
package com.mac.scp.domain;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
import javax.persistence.*;
|
||||
import javax.websocket.Session;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 用户基础信息类
|
||||
@ -15,51 +13,114 @@ import javax.websocket.Session;
|
||||
@UniqueConstraint(name = "openidIndex", columnNames = {"openid"})
|
||||
})
|
||||
@Entity
|
||||
public class UserBean{
|
||||
public class UserBean {
|
||||
/**
|
||||
* 用户id
|
||||
*/
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private long userId;
|
||||
|
||||
private String openid; //qq登录使用
|
||||
/**
|
||||
* openid qq登录使用
|
||||
*/
|
||||
private String openid;
|
||||
|
||||
/**
|
||||
* 用户名称
|
||||
*/
|
||||
private String username;
|
||||
|
||||
/**
|
||||
* 真实名
|
||||
*/
|
||||
private String realname;
|
||||
|
||||
/**
|
||||
* 密码
|
||||
*/
|
||||
private String password;
|
||||
|
||||
/**
|
||||
* qq密码
|
||||
*/
|
||||
private String qqpassword;
|
||||
|
||||
/**
|
||||
* 重复密码
|
||||
*/
|
||||
@Transient
|
||||
private String passwordAgain;
|
||||
|
||||
/**
|
||||
* 手机号码
|
||||
*/
|
||||
private String telephone;
|
||||
|
||||
/**
|
||||
* 邮箱
|
||||
*/
|
||||
private String email;
|
||||
|
||||
/**
|
||||
* 年龄
|
||||
*/
|
||||
private String sex;
|
||||
|
||||
/**
|
||||
* 生日
|
||||
*/
|
||||
private String birthday;
|
||||
|
||||
/**
|
||||
* 省
|
||||
*/
|
||||
private String addrprovince;
|
||||
|
||||
/**
|
||||
* 市
|
||||
*/
|
||||
private String addrcity;
|
||||
|
||||
/**
|
||||
* 区
|
||||
*/
|
||||
private String addrarea;
|
||||
|
||||
/**
|
||||
* 行业
|
||||
*/
|
||||
private String industry;
|
||||
|
||||
/**
|
||||
* 职位
|
||||
*/
|
||||
private String position;
|
||||
|
||||
/**
|
||||
* 介绍
|
||||
*/
|
||||
private String intro;
|
||||
|
||||
/**
|
||||
* 盐值
|
||||
*/
|
||||
private String salt;//加密密码的盐
|
||||
//private byte state;//用户状态,0:创建未认证(比如没有激活,没有输入验证码等等)--等待验证的用户 , 1:正常状态,2:用户被锁定.
|
||||
|
||||
/**
|
||||
* 用户头像URL
|
||||
*/
|
||||
private String imageurl;
|
||||
|
||||
/**
|
||||
* 注册时间
|
||||
*/
|
||||
private String registertime;
|
||||
|
||||
/**
|
||||
* 角色列表
|
||||
*/
|
||||
@ManyToMany(fetch = FetchType.EAGER)//立即从数据库中进行加载数据
|
||||
@JoinTable(name = "user_role",
|
||||
joinColumns = {@JoinColumn(name = "userId")},
|
||||
@ -76,12 +137,28 @@ public class UserBean{
|
||||
*/
|
||||
@Transient
|
||||
private int notReadCount;
|
||||
|
||||
/**
|
||||
* 文章数量
|
||||
*/
|
||||
@Transient
|
||||
private int essaycount;
|
||||
/**
|
||||
* 验证码
|
||||
*/
|
||||
@Transient
|
||||
private String verificationcode;
|
||||
|
||||
|
||||
|
||||
public int getEssaycount() {
|
||||
return essaycount;
|
||||
}
|
||||
|
||||
public void setEssaycount(int essaycount) {
|
||||
this.essaycount = essaycount;
|
||||
}
|
||||
|
||||
public int getNotReadCount() {
|
||||
return notReadCount;
|
||||
}
|
||||
|
@ -46,6 +46,7 @@ public interface UserMapper {
|
||||
UserBean selectUserByUserName(UserBean userBean);
|
||||
|
||||
void updateEmail(UserBean userBean);
|
||||
void updateTelephone(UserBean userBean);
|
||||
void updataImageUrl(UserBean userBean);
|
||||
|
||||
UserBean selectUserByUserNameAndPassword(UserBean userBean);
|
||||
|
@ -22,7 +22,7 @@ mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
|
||||
spring.datasource.driverClassName=com.mysql.cj.jdbc.Driver
|
||||
spring.datasource.url = jdbc:mysql://localhost:3306/file?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
|
||||
spring.datasource.username=root
|
||||
spring.datasource.password=ma123456
|
||||
spring.datasource.password=macpassword123
|
||||
|
||||
#数据库初始化
|
||||
spring.datasource.data=classpath:database/data.sql
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1 +0,0 @@
|
||||
.registerWrapper[data-v-c0dcfd84]{height:500px!important;min-height:500px!important;width:100%!important;padding-top:100px}.registerWrapper .formWrapper[data-v-c0dcfd84]{width:375px;margin:0 auto;text-align:center}.registerWrapper .formWrapper .registerTitle[data-v-c0dcfd84]{margin-bottom:10px;font-weight:300;font-size:30px;color:#000}.registerWrapper .formWrapper .registerSystem[data-v-c0dcfd84]{font-weight:300;color:#999}.registerWrapper .formWrapper .demo-ruleForm[data-v-c0dcfd84]{width:100%;margin-top:20px}.registerWrapper .formWrapper .demo-ruleForm[data-v-c0dcfd84] .el-form-item__content{margin-left:0!important}.registerWrapper .formWrapper .demo-ruleForm[data-v-c0dcfd84] .el-input__inner{font-size:16px}.registerWrapper .formWrapper .demo-ruleForm .registerButtonWrapper .registerButton[data-v-c0dcfd84]{width:100%}.registerWrapper .formWrapper .demo-ruleForm .registerButtonWrapper[data-v-c0dcfd84] .el-button{padding:10px 90px;font-size:16px}.registerWrapper .formWrapper .tip[data-v-c0dcfd84]{width:70%;margin-left:86px}
|
@ -1 +0,0 @@
|
||||
.upload-demo[data-v-42cc5c32]{display:inline-block}.el-button--medium[data-v-42cc5c32]{margin-left:10px}.el-dialog-div[data-v-5aa1381c]{height:200px;overflow:auto}.el-header[data-v-5aa1381c]{padding-top:10px;height:90px!important}.breadCrumb[data-v-5aa1381c]{padding-top:10px}.fileWrapper[data-v-e1fd0c08]{width:100%!important}.el-container[data-v-e1fd0c08]{height:90vh}.el-main[data-v-e1fd0c08]{padding-top:0!important;overflow:hidden}
|
@ -1 +0,0 @@
|
||||
.loginWrapper[data-v-3cc9ef78]{height:500px!important;min-height:500px!important;padding-top:100px}.loginWrapper .formWrapper[data-v-3cc9ef78]{width:375px;margin:0 auto;text-align:center}.loginWrapper .formWrapper .loginTitle[data-v-3cc9ef78]{margin-bottom:10px;font-weight:300;font-size:30px;color:#000}.loginWrapper .formWrapper .loginSystem[data-v-3cc9ef78]{font-weight:300;color:#999}.loginWrapper .formWrapper .demo-ruleForm[data-v-3cc9ef78]{width:100%;margin-top:20px}.loginWrapper .formWrapper .demo-ruleForm[data-v-3cc9ef78] .el-form-item__content{margin-left:0!important}.loginWrapper .formWrapper .demo-ruleForm[data-v-3cc9ef78] .el-input__inner{font-size:16px}.loginWrapper .formWrapper .demo-ruleForm .forgetPassword[data-v-3cc9ef78]{text-align:right;margin:-22px 0 0 0}.loginWrapper .formWrapper .demo-ruleForm .loginButtonWrapper .loginButton[data-v-3cc9ef78]{width:100%}.loginWrapper .formWrapper .demo-ruleForm .loginButtonWrapper[data-v-3cc9ef78] .el-button{padding:10px 90px;font-size:16px}.loginWrapper .formWrapper .tip[data-v-3cc9ef78]{width:70%;margin-left:86px}
|
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 41 KiB |
Before Width: | Height: | Size: 39 KiB |
Before Width: | Height: | Size: 4.1 KiB |
Before Width: | Height: | Size: 4.8 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 5.7 KiB |
Before Width: | Height: | Size: 5.9 KiB |
Before Width: | Height: | Size: 5.1 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 5.4 KiB |
Before Width: | Height: | Size: 5.5 KiB |
Before Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.6 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 4.2 KiB |
Before Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 4.7 KiB |
Before Width: | Height: | Size: 6.3 KiB |
@ -1,47 +0,0 @@
|
||||
<?xml version="1.0" standalone="no"?>
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
|
||||
<!--
|
||||
2013-9-30: Created.
|
||||
-->
|
||||
<svg>
|
||||
<metadata>
|
||||
Created by iconfont
|
||||
</metadata>
|
||||
<defs>
|
||||
|
||||
<font id="iconfont" horiz-adv-x="1024" >
|
||||
<font-face
|
||||
font-family="iconfont"
|
||||
font-weight="500"
|
||||
font-stretch="normal"
|
||||
units-per-em="1024"
|
||||
ascent="896"
|
||||
descent="-128"
|
||||
/>
|
||||
<missing-glyph />
|
||||
|
||||
<glyph glyph-name="SCP" unicode="" d="M228.962715 507.717719c-17.178241 10.890025-37.049824 16.646122-57.466829 16.646122-59.246359 0-107.446128-48.199769-107.446128-107.446127 0-42.325991 24.62484-80.388888 62.981427-97.821933 0.812505-0.481977 1.655709-0.909719 2.52552-1.279133 19.726274-8.343015 34.131355-25.794479 38.531571-46.682205 2.086521-9.903557 10.825556-16.700357 20.559245-16.700357a21.204951 21.204951 0 0 1 4.357238 0.455371c11.366885 2.394537 18.639522 13.550621 16.243962 24.916483-7.036253 33.398668-29.602202 61.441351-60.624752 75.569116a21.149693 21.149693 0 0 1-2.498914 1.25969 65.287959 65.287959 0 0 0-40.011272 60.282968c0 36.051077 29.328979 65.38108 65.381079 65.381079 25.059745 0 47.532573-13.96506 58.649772-36.446073 5.149277-10.413164 17.763572-14.679327 28.177759-9.529027 10.412141 5.149277 14.679327 17.764596 9.529028 28.176736a107.702977 107.702977 0 0 1-38.888706 43.21729zM124.396171 421.485753v-0.00307c-0.001023-7.023974 5.692652-12.717649 12.715603-12.718673 7.023974-0.001023 12.717649 5.692652 12.718673 12.715603v0.00307c0.001023 7.023974-5.692652 12.717649-12.715603 12.718672-7.02295 0.001023-12.717649-5.691629-12.718673-12.715602zM161.04486 421.485753v-0.00307c0-7.023974 5.693676-12.717649 12.717649-12.71765 7.023974 0 12.717649 5.693676 12.717649 12.71765 0.001023 7.023974-5.692652 12.717649-12.715602 12.718672-7.023974 0.001023-12.718673-5.691629-12.719696-12.715602zM210.42143 434.211589c-7.023974 0.00614-12.722766-5.682419-12.727882-12.706394v-0.021489c-0.00614-7.023974 5.682419-12.722766 12.706393-12.727882 7.023974-0.00614 12.722766 5.682419 12.727882 12.706393v0.021489c0.00614 7.02295-5.682419 12.721743-12.706393 12.727883zM441.453271 408.475438c-21.552875 9.407254-35.062564 16.873296-40.532136 22.399149-5.471618 5.522784-8.204869 11.5695-8.204869 18.132986 0 8.204869 3.991917 14.740726 11.978823 19.609617 7.983835 4.865821 18.650779 7.302313 31.998785 7.302313 22.86373 0 42.829458-5.8001 59.895135-17.394159v50.869574c-16.847713 6.453992-37.688367 9.6815-62.520939 9.6815-29.647227 0-53.469795-6.537903-71.463612-19.609616-17.996886-13.07376-26.993794-31.42471-26.993794-55.053874 0-32.162514 19.85521-56.669674 59.566654-73.515341 25.270547-10.502192 40.860617-18.817578 46.76714-24.942065 5.907547-6.128581 8.861832-12.635785 8.861831-19.527752 0-7.987928-3.720741-14.522762-11.159154-19.609617-7.440459-5.086855-18.542308-7.629771-33.311686-7.629771-26.038026 0-49.285496 8.476045-69.741388 25.435299v-54.31607c18.597567-9.4093 42.444694-14.112416 71.5465-14.112415 31.835056 0 56.392358 6.399757 73.679069 19.199271 17.284665 12.799514 25.927509 31.397081 25.927509 55.7927 0 16.627702-4.733814 30.958082-14.195303 42.993187-9.460466 12.031011-26.826995 23.464411-52.098565 34.295084zM572.156078 480.759741c-25.106818-25.545816-37.659715-58.392922-37.659715-98.53927 0-38.180578 11.239995-68.731384 33.72101-91.647304 22.481014-22.920012 52.863998-34.378995 91.156116-34.378995 29.754674 0 53.877071 4.538363 72.366168 13.619183v49.722448c-18.599613-10.940167-39.219233-16.410762-61.863977-16.410762-24.068162 0-43.157939 7.602142-57.270354 22.809495-14.112416 15.205307-21.169135 35.281551-21.169136 60.223617 0 25.599028 7.438413 46.328142 22.317285 62.192457 14.876826 15.861246 34.732036 23.793916 59.567677 23.793916 21.768793 0 41.241286-5.033643 58.418505-15.096836v52.346205c-16.738219 6.453992-37.524638 9.6815-62.35721 9.6815-39.71042 0-72.119551-12.772908-97.226369-38.315654zM864.165712 514.809231h-87.463004v-254.185166h54.151317v88.612177h27.89635c28.661783-0.655939 52.53654 6.863315 71.628364 22.562878 19.089777 15.696494 28.635177 36.5658 28.635178 62.602803 0 53.603849-31.617092 80.407308-94.848205 80.407308z m-9.845229-124.056433h-23.466458v82.047667h23.958668c31.506575 0 47.25935-13.511735 47.25935-40.532135 0-27.677363-15.917528-41.515532-47.75156-41.515532z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="meiyou" unicode="" d="M833 581.4c-43.8-28.2-61.9-48.2-87.8-47.1-25.9 1.1-70.5 28.6-88.9 36.4-29 12.3-70.3 21.6-95.6 5.3-20.1-14.5-2.9-39 4.6-48.1 7.4-9.1 43.7-36.4 54.4-49.8 6.1-7.7 6.7-18.8-5.8-20.6-24-6.7-41.4-1.6-57.3 1.8-15.8 3.3-32.2 15.3-57.7 13.7-32-2.1-21.1-29.7-21.1-29.7s26.4-78.7 97.6-96.5c62.2-15.6 347.3 127.7 378.6 180.1 30.5 50.5-59.3 94.2-121 54.5z m49.4-70.1c-32.8-24-119.1-69.2-216.8-109.3-32.5-13.3-60.8-22.1-80.5-16.7-21.7 6-44.6 19.8-52.3 37.3-3.3 7.6-1.9 12 8.7 7.6 13.2-5.5 24.6-6.9 39.8-8.8 17.8-2.2 34.7 0 34.7 0 28.7 4.3 32.8 11.2 39.5 19.2 7.8 9.4 9.3 22.3 4.3 39.5-5.4 18.9-30.3 36.4-30.3 36.4s-38.8 22.9-23.5 31.4c13 7.3 42-10.3 60.4-21.5 12-7.3 48.2-23.2 66.4-25.7 33.3-4.6 62.4 10.6 102.4 41.9 27.7 22.2 115.5 18.6 47.2-31.3zM801.7 365.5c-10.4 0-18.8-8.4-18.8-18.7-18.5-137.5-139.4-243.7-282.8-243.7-107.1 0-200.2 59.2-248.2 146.5 127.4 27.2 199.3 65.7 209.5 78.5 5.8 5.9 5.8 39.8-36.7 18.7-55.9-27.8-127.6-50.5-188.5-63.6-12.2 31.3-18.8 65.4-18.8 101 0 155.3 126.6 281.3 282.8 281.3 63.6 0 128.8-22.7 176.7-61.4 0 0 8.3-7 16.9-6.7 10.5 0.3 17.4 7.6 17.4 18 0 4.5-1.7 8.8-4.6 12.3 0.1 0.1-1.1 1.1-1.6 1.6-0.4 0.4-1 0.8-1.4 1.1-55.3 45.3-126.1 72.6-203.3 72.6-177 0-320.4-142.7-320.4-318.7 0-37.9 6.7-74.3 18.9-108.1-13.7-2.2-26.4-3.7-37.7-4.4-43.6-3-75.7 2-37.7 56.2 23.5 33.5 30.5 47.2 18.8 56.3-12.3 6.6-22.6-4.6-22.6-4.6s-44.5-52.3-53-89.1c-3.7-17.9-16.9-62.1 75.4-56.3 24.8 1.6 48.5 4.3 71.2 8 52.5-104.8 161.3-176.7 287-176.7 160.2 0 295.4 115.9 319.1 268.6 1.3 8.2 1.3 8.2 1.3 12.7 0 10.3-8.4 18.6-18.9 18.6z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="guanbi" unicode="" d="M591.530667 384.256l416.341333 416.768a54.613333 54.613333 0 0 1 0 76.8l-2.304 2.304a54.442667 54.442667 0 0 1-76.629333 0l-416.426667-417.365333L96.256 880.042667a54.442667 54.442667 0 0 1-76.629333 0L17.237333 877.909333a53.589333 53.589333 0 0 1 0-76.8l416.426667-416.768-416.426667-416.853333a54.613333 54.613333 0 0 1 0-76.8l2.304-2.218667a54.442667 54.442667 0 0 1 76.629334 0l416.426666 416.853334 416.341334-416.853334a54.442667 54.442667 0 0 1 76.629333 0l2.304 2.304a54.613333 54.613333 0 0 1 0 76.8l-416.426667 416.768z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="yuanchuangbiaoqian" unicode="" d="M64 540.8v-313.6c0-12.4 10-22.4 22.4-22.4h851.2c12.4 0 22.4 10 22.4 22.4V540.8c0 12.4-10 22.4-22.4 22.4H86.4c-12.4 0-22.4-10-22.4-22.4zM459.8 272c-5.6 5.6-12.1 11.5-19.5 17.7 8.7 13.6 14.2 27.9 16.7 42.8 3.1 14.2 4.6 35.9 4.6 65.1V484h202.6v-20.4h-81.8c-0.6-1.3-1.6-3.7-2.8-7.4-1.9-7.4-3.4-12.7-4.6-15.8h73.4v-92.9h-55.8V301c-0.6-15.5-9-23.5-25.1-24.2-5.6-0.6-16.1-0.9-31.6-0.9-0.6 6.8-2.5 13.9-5.6 21.4h26c8-0.6 12.1 2.5 12.1 9.3v40.9h-62.3v92.9H550c1.2 3.7 2.8 9.9 4.6 18.6 0-1.9 0.6-0.3 1.9 4.6h-70.6V393c0-29.7-1.9-52.4-5.6-67.9-3.1-16.9-9.9-34.5-20.5-53.1z m37.2 9.3c-5 5.6-10.2 11.5-15.8 17.7 14.9 9.9 30.7 23.5 47.4 40.9l17.7-14.9c-7.4-7.4-18.9-17.7-34.4-30.7-6.2-5.6-11.2-9.9-14.9-13z m32.5 139.4v-18.6h95.7v18.6h-95.7z m0-35.3v-18.6h95.7v18.6h-95.7z m119.9-102.2c-8.7 8.7-21.7 21.1-39 37.2l-4.6 4.6 16.7 13.9c4.9-4.3 12.1-10.9 21.4-19.5 10.5-9.3 18.3-15.8 23.2-19.5l-17.7-16.7z m148.8 131l-1.9 0.9c0-16.1-0.6-32.9-1.9-50.2-0.6-19.2-10.2-29.1-28.8-29.7l-26-0.9c-0.6 3.1-1.9 8.7-3.7 16.7-0.6 2.5-0.9 4.3-0.9 5.6 8.7-0.6 16.1-0.9 22.3-0.9 9.3-0.6 14.5 4.3 15.8 14.9v9.3c0.6 6.8 0.9 11.8 0.9 14.9h-51.1v-79c-0.6-10.5 4.6-15.8 15.8-15.8h29.7c10.5 0 16.7 4 18.6 12.1 0 1.2 0.3 3.1 0.9 5.6 0.6 1.9 1.5 7.4 2.8 16.7 1.2-0.6 3.4-1.3 6.5-1.9 3.7-1.9 9.3-3.7 16.7-5.6-0.6-5-2.2-11.8-4.6-20.4-0.6-3.1-1.3-5.3-1.9-6.5-3.7-14.2-15.5-21.1-35.3-20.4h-39c-22.9-0.6-34.1 10.2-33.5 32.5v95.7c-0.6-0.6-1.9-1.6-3.7-2.8-1.3-1.3-4-3.4-8.4-6.5-3.1 8-6.5 15.5-10.2 22.3 28.5 19.8 49.9 44.9 64.1 75.3l25.1-1.9c-0.6-1.3-1.3-2.8-1.9-4.6-1.3-2.5-2.2-4.3-2.8-5.6 10.5-9.3 24.2-22.6 40.9-40l12.1-12.1-16.6-17.7z m-47.4 51.1c-11.2-18-25.1-34.4-41.8-49.3h87.4c-5 6.2-12.4 14.5-22.3 25.1-10 10.6-17.8 18.7-23.3 24.2z m69.7-135.7V470h23.2v-140.3h-23.2z m10.2-53c-1.3 7.4-2.8 15.2-4.6 23.2h28.8c10.5 0 15.5 4.9 14.9 14.9V495.1H894v-186.8c1.2-20.4-8.7-31-29.7-31.6-11.3-0.1-22.5-0.1-33.6-0.1z m-642.6 188c7.4-0.4 14.8 2.2 20.5 7.8 5.6 5.6 8.2 13.1 7.8 20.4 0.3 6.4 2.9 12.7 7.8 17.6 10.5 10.5 27.6 10.5 38.1 0s10.5-27.6 0-38.1c-4.9-4.9-11.2-7.5-17.6-7.8-7.4 0.4-14.8-2.2-20.4-7.8-5.6-5.6-8.2-13.1-7.8-20.4-0.3-6.4-2.9-12.7-7.8-17.6-10.5-10.5-27.6-10.5-38.1 0s-10.5 27.6 0 38.1c4.8 4.9 11.1 7.5 17.5 7.8z m-71.4 45.9c10.5 10.5 27.5 10.5 38 0s10.5-27.5 0-38-27.5-10.5-38 0-10.5 27.5 0 38z m181.6-207.1c-7.4 0.4-14.8-2.2-20.4-7.8-5.6-5.6-8.2-13.1-7.8-20.4-0.3-6.4-2.9-12.7-7.8-17.6-10.5-10.5-27.6-10.5-38.1 0s-10.5 27.6 0 38.1c4.9 4.9 11.2 7.5 17.6 7.8 7.4-0.4 14.8 2.2 20.4 7.8 5.6 5.6 8.2 13.1 7.8 20.4 0.3 6.4 2.9 12.7 7.8 17.6 10.5 10.5 27.6 10.5 38.1 0s10.5-27.6 0-38.1c-4.9-4.9-11.2-7.5-17.6-7.8z m71.4-45.9c-10.5-10.5-27.5-10.5-38 0s-10.5 27.5 0 38 27.5 10.5 38 0 10.5-27.5 0-38z m0 214.9c-4.9-4.9-11.2-7.5-17.6-7.8-7.4 0.4-14.8-2.2-20.5-7.8-5.6-5.6-8.2-13.1-7.8-20.5-0.3-6.4-2.9-12.7-7.8-17.6-4.9-4.9-11.2-7.5-17.6-7.8-7.4 0.4-14.8-2.2-20.5-7.8-5.6-5.6-8.2-13.1-7.8-20.5-0.3-6.4-2.9-12.7-7.8-17.6-4.9-4.9-11.2-7.5-17.6-7.8-7.4 0.4-14.8-2.2-20.5-7.8-5.6-5.6-8.2-13.1-7.8-20.5-0.3-6.4-2.9-12.7-7.8-17.6-4.9-4.9-11.2-7.5-17.6-7.8-7.4 0.4-14.8-2.2-20.5-7.8-5.6-5.6-8.2-13.1-7.8-20.5-0.3-6.4-2.9-12.7-7.8-17.6-10.5-10.5-27.6-10.5-38.1 0s-10.5 27.6 0 38.1c4.9 4.9 11.2 7.5 17.6 7.8 7.4-0.4 14.8 2.2 20.5 7.8 5.6 5.6 8.2 13.1 7.8 20.5 0.3 6.4 2.9 12.7 7.8 17.6 4.9 4.9 11.2 7.5 17.6 7.8 7.4-0.4 14.8 2.2 20.5 7.8 5.6 5.6 8.2 13.1 7.8 20.5 0.3 6.4 2.9 12.7 7.8 17.6 4.9 4.9 11.2 7.5 17.6 7.8 7.4-0.4 14.8 2.2 20.5 7.8 5.6 5.6 8.2 13.1 7.8 20.5 0.3 6.4 2.9 12.7 7.8 17.6 4.9 4.9 11.2 7.5 17.6 7.8 7.4-0.4 14.8 2.2 20.5 7.8 5.6 5.6 8.2 13.1 7.8 20.5 0.3 6.4 2.9 12.7 7.8 17.6 10.5 10.5 27.6 10.5 38.1 0s10.5-27.6 0-38.1zM915 250H422V518h493v-268z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="S" unicode="" d="M811.707317-128h-599.414634C94.907317-128 0-33.092682999999965 0 84.29268300000001v599.414634C0 801.092683 94.907317 896 212.292683 896h599.414634C929.092683 896 1024 801.092683 1024 683.707317v-599.414634c0-117.385366-94.907317-212.292683-212.292683-212.292683zM212.292683 871.02439C109.892683 871.02439 24.97561 786.107317 24.97561 683.707317v-599.414634C24.97561-18.107316999999966 109.892683-103.02439000000004 212.292683-103.02439000000004h599.414634c102.4 0 187.317073 84.917073 187.317073 187.317073v599.414634C999.02439 786.107317 914.107317 871.02439 811.707317 871.02439h-599.414634zM124.878049 231.64878h92.409756c27.473171 2.497561 64.936585 7.492683 117.385366 12.487805 9.990244-57.443902 29.970732-97.404878 62.439024-124.878048 29.970732-27.473171 72.429268-39.960976 124.878049-39.960976 54.946341 0 97.404878 12.487805 127.37561 34.965854s42.458537 52.44878 42.458536 82.419512c0 19.980488-4.995122 37.463415-17.482927 52.44878s-32.468293 27.473171-62.439024 37.463415c-19.980488 7.492683-67.434146 19.980488-139.863415 37.463415-92.409756 22.478049-157.346341 52.44878-194.809756 84.917073C224.780488 453.931707 199.804878 511.37561 199.804878 581.307317c0 44.956098 12.487805 84.917073 37.463415 122.380488s59.941463 67.434146 107.395122 87.414634S447.063415 821.073171 514.497561 821.073171c107.395122 0 189.814634-22.478049 242.263415-69.931708s82.419512-109.892683 84.917073-189.814634l-172.331708-7.492683c-7.492683 44.956098-22.478049 74.926829-47.453658 94.907317s-59.941463 29.970732-109.892683 29.970732c-49.95122 0-89.912195-9.990244-117.385366-29.970732-17.482927-12.487805-27.473171-29.970732-27.473171-52.44878 0-19.980488 7.492683-37.463415 24.97561-52.448781 22.478049-17.482927 74.926829-37.463415 159.843903-57.443902s147.356098-39.960976 187.317073-62.439024 72.429268-49.95122 94.907317-87.414635 34.965854-82.419512 34.965854-137.365853c0-49.95122-12.487805-94.907317-39.960976-137.365854-27.473171-42.458537-64.936585-74.926829-114.887805-94.907317s-112.390244-32.468293-187.317073-32.468293c-107.395122 0-192.312195 24.97561-249.756098 74.92683-44.956098 39.960976-77.42439 92.409756-92.409756 159.843902-9.990244 14.985366-57.443902 39.960976-59.941463 62.439024z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="tuichu" unicode="" d="M916.6 406.3L750.7 566c-13.3 12.8-33.2 12.8-46.5 0-13.3-12.8-13.3-31.9 0-44.7L813.7 416H495.2c-19.9 0-33.2-12.8-33.2-31.9 0-19.2 13.3-31.9 33.2-31.9h318.5L704.2 246.7c-13.3-12.8-13.3-31.9 0-44.7 6.6-6.4 13.3-9.6 23.2-9.6 10 0 16.6 3.2 23.2 9.6l165.9 162.8s0 3.2 3.3 3.2c10.1 9.6 10.1 28.8-3.2 38.3M827 160.5c-19.9 0-33.2-12.8-33.2-31.9v-63.8c0-19.1-13.3-31.9-33.2-31.9H196.5c-19.9 0-33.2 12.8-33.2 31.9V703.2c0 19.2 13.3 31.9 33.2 31.9h564.1c19.9 0 33.2-12.8 33.2-31.9v-63.8c0-19.2 13.3-31.9 33.2-31.9s33.2 12.8 33.2 31.9v63.8c0 54.3-43.1 95.8-99.5 95.8H196.5C140.1 799 97 757.5 97 703.2v-638.5c0-54.3 43.1-95.8 99.5-95.8h564.1c56.4 0 99.5 41.5 99.5 95.8v63.8c0.1 19.3-13.2 32-33.1 32" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
<glyph glyph-name="biaoti" unicode="" d="M912.384 539.136L512 816.128 111.104 539.136l400.384-276.992 400.896 276.992zM512 200.704l-353.792 235.52-47.104-49.152L511.488 110.08l400.384 276.992-47.616 50.176L512 200.704z m0-152.576l-353.792 235.52-47.104-49.152 400.384-276.992 400.384 276.992-47.616 50.176L512 48.128z" horiz-adv-x="1024" />
|
||||
|
||||
|
||||
|
||||
|
||||
</font>
|
||||
</defs></svg>
|
Before Width: | Height: | Size: 13 KiB |
Before Width: | Height: | Size: 56 KiB |
Before Width: | Height: | Size: 19 KiB |
@ -1 +0,0 @@
|
||||
<!DOCTYPE html><html lang=en><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1"><meta name=keywords content="qiwenshare,奇文共赏,奇文社区,奇文分享社区,奇文社区,奇文,IT技术,Spring,Spring Boot,Spring Cloud,架构,大数据,开发者,编程,开源,IT网站,IT技术博客,Java,Python"><meta name=description content=本站是MAC和小鲤鱼听听创建的IT技术分享社区,注重文章内容的高质量和原创。分享内容从前台到后端,从微服务的搭建到网站的建设。快来加入我们,期待与您共建更优质的内容...><link rel=icon href=/SCP.ico><title id=title_id>奇文社区 - 高质量的IT技术分享社区</title><link href=/css/chunk-1ce2d50b.e04dba09.css rel=prefetch><link href=/css/chunk-29e95db2.6ac07633.css rel=prefetch><link href=/css/chunk-d916100e.d2760097.css rel=prefetch><link href=/js/chunk-1ce2d50b.91d8c3d7.js rel=prefetch><link href=/js/chunk-29e95db2.b7891366.js rel=prefetch><link href=/js/chunk-d916100e.e200d723.js rel=prefetch><link href=/css/app.cbc3de22.css rel=preload as=style><link href=/css/chunk-vendors.723a90c8.css rel=preload as=style><link href=/js/app.9b5cd01c.js rel=preload as=script><link href=/js/chunk-vendors.5a6bbf8e.js rel=preload as=script><link href=/css/chunk-vendors.723a90c8.css rel=stylesheet><link href=/css/app.cbc3de22.css rel=stylesheet></head><body><noscript><strong>We're sorry but webscp doesn't work properly without JavaScript enabled. Please enable it to continue.</strong></noscript><div id=app></div><script src=/js/chunk-vendors.5a6bbf8e.js></script><script src=/js/app.9b5cd01c.js></script></body></html>
|