mirror of
https://gitee.com/bookshelfplus/bookshelfplus
synced 2025-10-11 02:05:15 +08:00
重新引入Redis;用户登录与管理员登录完成;引入NanoID代替UUID;调整Spring Boot idea中的启动参数;swagger页面描述信息完善;更新swagger,更新Api文档
This commit is contained in:
@@ -44,8 +44,14 @@ router.get('/register', function (req, res) {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
router.get('/admin/index', function (req, res) { // '/admin(/index)?'
|
router.get('/dashboard/admin/index', function (req, res) { // '/admin(/index)?'
|
||||||
res.render('admin/index', {
|
res.render('dashboard/admin/index', {
|
||||||
|
title: "后台管理(管理员)"
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
router.get('/dashboard/user/index', function (req, res) { // '/admin(/index)?'
|
||||||
|
res.render('dashboard/user/index', {
|
||||||
title: "后台管理"
|
title: "后台管理"
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@@ -1,16 +0,0 @@
|
|||||||
<meta charset="UTF-8">
|
|
||||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
||||||
|
|
||||||
<title><%= typeof title !=='undefined' ? title : "前端服务出现异常"; %></title>
|
|
||||||
|
|
||||||
<link rel="stylesheet" href="/assets/stylesheets/style.css">
|
|
||||||
<script src="/assets/lib/jquery/3.6.0/jquery.min.js"></script>
|
|
||||||
<script src="/assets/lib/axios/0.26.1/axios.min.js"></script>
|
|
||||||
|
|
||||||
<script src="/assets/javascripts/httpRequest.js"></script>
|
|
||||||
<script>
|
|
||||||
// API地址
|
|
||||||
const APIHOST = '<%= global.site.api.prefix %>';
|
|
||||||
axios.defaults.baseURL = APIHOST;
|
|
||||||
</script>
|
|
@@ -1,41 +0,0 @@
|
|||||||
<!DOCTYPE html>
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
|
||||||
<head>
|
|
||||||
<%- include("./component/header.html"); %>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<%- include("./component/navbar.html"); %>
|
|
||||||
<main class="main">
|
|
||||||
<h1><%= title %></h1>
|
|
||||||
<div id="container">
|
|
||||||
|
|
||||||
</div>
|
|
||||||
</main>
|
|
||||||
<%- include("./component/footer.html"); %>
|
|
||||||
|
|
||||||
<!-- 获取参数 -->
|
|
||||||
<script src="../assets/javascripts/getParams.js"></script>
|
|
||||||
<script>
|
|
||||||
var requestParams = getParams();
|
|
||||||
function getUserStatus() {
|
|
||||||
getRequest("/user/getUserStatus", { })
|
|
||||||
.then(function (responseData) {
|
|
||||||
var axiosData = responseData.data;
|
|
||||||
var status = axiosData.status;
|
|
||||||
var data = axiosData.data;
|
|
||||||
if (status === "success") {
|
|
||||||
console.log(data)
|
|
||||||
if(data) {
|
|
||||||
|
|
||||||
} else {
|
|
||||||
window.location.href = "/login";
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
alert(`出错啦!${data.errMsg} (错误码: ${data.errCode}) `);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
getUserStatus();
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
@@ -11,6 +11,7 @@
|
|||||||
<a href="/search">搜索</a>
|
<a href="/search">搜索</a>
|
||||||
<a href="/category">分类</a>
|
<a href="/category">分类</a>
|
||||||
<a class="narrowHide" href="/about">关于</a>
|
<a class="narrowHide" href="/about">关于</a>
|
||||||
|
<a class="narrowHide" href="/login">登录</a>
|
||||||
</div>
|
</div>
|
||||||
<div class="grid-item"></div>
|
<div class="grid-item"></div>
|
||||||
</div>
|
</div>
|
||||||
|
17
bookshelfplus-frontend/views/dashboard/admin/index.html
Normal file
17
bookshelfplus-frontend/views/dashboard/admin/index.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<%- include("../component/header.html"); %>
|
||||||
|
<%- include("../component/header-admin.html"); %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%- include("../component/navbar.html"); %>
|
||||||
|
<main class="main">
|
||||||
|
<h1><%= title %></h1>
|
||||||
|
<div id="container">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<%- include("../component/footer-admin.html"); %>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -0,0 +1,4 @@
|
|||||||
|
<div class="footer" style="margin-top: 10vh;">
|
||||||
|
<hr>
|
||||||
|
<p>书栖网</p>
|
||||||
|
</div>
|
@@ -0,0 +1,6 @@
|
|||||||
|
<script>
|
||||||
|
if(localStorage.getItem("is_admin") === "false") {
|
||||||
|
// 是普通用户,跳转到普通用户后台页面
|
||||||
|
window.location.href = "/dashboard/user/index";
|
||||||
|
}
|
||||||
|
</script>
|
@@ -0,0 +1,6 @@
|
|||||||
|
<script>
|
||||||
|
if(localStorage.getItem("is_admin") === "true") {
|
||||||
|
// 是管理员用户,跳转到管理员用户后台页面
|
||||||
|
window.location.href = "/dashboard/admin/index";
|
||||||
|
}
|
||||||
|
</script>
|
46
bookshelfplus-frontend/views/dashboard/component/header.html
Normal file
46
bookshelfplus-frontend/views/dashboard/component/header.html
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
||||||
|
|
||||||
|
<title><%= typeof title !=='undefined' ? title : "前端服务出现异常"; %></title>
|
||||||
|
|
||||||
|
<link rel="stylesheet" href="/assets/stylesheets/style.css">
|
||||||
|
<script src="/assets/lib/jquery/3.6.0/jquery.min.js"></script>
|
||||||
|
<script src="/assets/lib/axios/0.26.1/axios.min.js"></script>
|
||||||
|
|
||||||
|
<script src="/assets/javascripts/httpRequest.js"></script>
|
||||||
|
<script>
|
||||||
|
// API地址
|
||||||
|
const APIHOST = '<%= global.site.api.prefix %>';
|
||||||
|
axios.defaults.baseURL = APIHOST;
|
||||||
|
|
||||||
|
function getUserStatus() {
|
||||||
|
if(!localStorage) {
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!localStorage.getItem("token") || !localStorage.getItem("is_admin")) {
|
||||||
|
localStorage.clear("token");
|
||||||
|
localStorage.clear("is_admin");
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
getRequest("/user/getUserStatus", { token: localStorage.getItem("token") })
|
||||||
|
.then(function (responseData) {
|
||||||
|
var axiosData = responseData.data;
|
||||||
|
var status = axiosData.status;
|
||||||
|
var data = axiosData.data;
|
||||||
|
if (status === "success") {
|
||||||
|
console.log(data)
|
||||||
|
if(data) {
|
||||||
|
|
||||||
|
} else {
|
||||||
|
window.location.href = "/login";
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
alert(`出错啦!${data.errMsg} (错误码: ${data.errCode}) `);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getUserStatus();
|
||||||
|
</script>
|
@@ -16,7 +16,7 @@
|
|||||||
</div>
|
</div>
|
||||||
<script>
|
<script>
|
||||||
function logout() {
|
function logout() {
|
||||||
getRequest("/user/logout", {})
|
getRequest("/user/logout", { token: localStorage.getItem("token") })
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
var axiosData = response.data;
|
var axiosData = response.data;
|
||||||
var status = axiosData.status;
|
var status = axiosData.status;
|
||||||
@@ -25,7 +25,9 @@
|
|||||||
if (status === "success") {
|
if (status === "success") {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
if(data) {
|
if(data) {
|
||||||
alert("退出登录成功");
|
localStorage.clear("token");
|
||||||
|
localStorage.clear("is_admin");
|
||||||
|
// alert("退出登录成功");
|
||||||
// window.location.href = "/";
|
// window.location.href = "/";
|
||||||
location.reload();
|
location.reload();
|
||||||
} else {
|
} else {
|
17
bookshelfplus-frontend/views/dashboard/user/index.html
Normal file
17
bookshelfplus-frontend/views/dashboard/user/index.html
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||||
|
<head>
|
||||||
|
<%- include("../component/header.html"); %>
|
||||||
|
<%- include("../component/header-user.html"); %>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<%- include("../component/navbar.html"); %>
|
||||||
|
<main class="main">
|
||||||
|
<h1><%= title %></h1>
|
||||||
|
<div id="container">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</main>
|
||||||
|
<%- include("../component/footer-user.html"); %>
|
||||||
|
</body>
|
||||||
|
</html>
|
@@ -15,6 +15,27 @@
|
|||||||
margin-bottom: 20px;
|
margin-bottom: 20px;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
<script>
|
||||||
|
if(!localStorage) {
|
||||||
|
alert("您的浏览器不支持localStorage,请更换浏览器!");
|
||||||
|
window.location.href = "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
if(localStorage.getItem("token")) {
|
||||||
|
// 用户已登录
|
||||||
|
if(localStorage.getItem("is_admin") === "true") {
|
||||||
|
// 是管理员
|
||||||
|
window.location.href = "/dashboard/admin/index";
|
||||||
|
} else if(localStorage.getItem("is_admin") === "false") {
|
||||||
|
// 是普通用户
|
||||||
|
window.location.href = "/dashboard/user/index";
|
||||||
|
} else {
|
||||||
|
// 未知状态
|
||||||
|
localStorage.clear("token");
|
||||||
|
localStorage.clear("is_admin");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</script>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<%- include("./component/navbar.html"); %>
|
<%- include("./component/navbar.html"); %>
|
||||||
@@ -50,6 +71,10 @@
|
|||||||
// var encryptpwd = hex_sha1(password);
|
// var encryptpwd = hex_sha1(password);
|
||||||
// var encryptpwd = hex_md5(password);
|
// var encryptpwd = hex_md5(password);
|
||||||
|
|
||||||
|
if(localStorage.getItem("token"))
|
||||||
|
localStorage.clearItem("token");
|
||||||
|
if(localStorage.getItem("is_admin"))
|
||||||
|
localStorage.clearItem("is_admin");
|
||||||
postRequest("/user/login", { username: username, password: password })
|
postRequest("/user/login", { username: username, password: password })
|
||||||
.then(function (response) {
|
.then(function (response) {
|
||||||
var axiosData = response.data;
|
var axiosData = response.data;
|
||||||
@@ -59,11 +84,14 @@
|
|||||||
if (status === "success") {
|
if (status === "success") {
|
||||||
console.log(data);
|
console.log(data);
|
||||||
if(data) {
|
if(data) {
|
||||||
alert("登录成功");
|
localStorage.setItem("token", data.token);
|
||||||
|
// alert("登录成功");
|
||||||
if(data.group === "ADMIN") {
|
if(data.group === "ADMIN") {
|
||||||
window.location.href = "/admin/index";
|
localStorage.setItem("is_admin", "true");
|
||||||
|
window.location.href = "/dashboard/admin/index";
|
||||||
} else {
|
} else {
|
||||||
window.location.href = "/user/index";
|
localStorage.setItem("is_admin", "false");
|
||||||
|
window.location.href = "/dashboard/user/index";
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
alert("用户名或密码错误");
|
alert("用户名或密码错误");
|
||||||
|
@@ -11,7 +11,7 @@
|
|||||||
Target Server Version : 50726
|
Target Server Version : 50726
|
||||||
File Encoding : 65001
|
File Encoding : 65001
|
||||||
|
|
||||||
Date: 16/03/2022 00:50:42
|
Date: 01/04/2022 19:30:09
|
||||||
*/
|
*/
|
||||||
|
|
||||||
SET NAMES utf8mb4;
|
SET NAMES utf8mb4;
|
||||||
@@ -167,7 +167,7 @@ CREATE TABLE `user_info` (
|
|||||||
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`username` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`encript_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`encript_pwd` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`nickname` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`user_identity` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`group` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`phone` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
`weixin_third_party_auth_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
`weixin_third_party_auth_code` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
|
||||||
@@ -178,6 +178,6 @@ CREATE TABLE `user_info` (
|
|||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
-- Records of user_info
|
-- Records of user_info
|
||||||
-- ----------------------------
|
-- ----------------------------
|
||||||
INSERT INTO `user_info` VALUES (1, 'xiaomo', 'e10adc3949ba59abbe56e057f20f883e', '小小墨', 'ADMIN', '/密码/123456/', '', '', '');
|
INSERT INTO `user_info` VALUES (1, 'xiaomo', '7c4a8d09ca3762af61e59520943dc26494f8941b', '小小墨', 'ADMIN', '/密码/123456/', '', '', '');
|
||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 1;
|
SET FOREIGN_KEY_CHECKS = 1;
|
||||||
|
1
bookshelfplus/.idea/runConfigurations/App.xml
generated
1
bookshelfplus/.idea/runConfigurations/App.xml
generated
@@ -8,6 +8,7 @@
|
|||||||
</pattern>
|
</pattern>
|
||||||
</extension>
|
</extension>
|
||||||
<option name="SPRING_BOOT_MAIN_CLASS" value="plus.bookshelf.App" />
|
<option name="SPRING_BOOT_MAIN_CLASS" value="plus.bookshelf.App" />
|
||||||
|
<option name="VM_PARAMETERS" value="-XX:+AlwaysPreTouch -Xms2048m -Xmx5240m -Dspring.jmx.enabled=false -client -DarchetypeCatalog=internal" />
|
||||||
<option name="ALTERNATIVE_JRE_PATH" />
|
<option name="ALTERNATIVE_JRE_PATH" />
|
||||||
<method v="2">
|
<method v="2">
|
||||||
<option name="Make" enabled="true" />
|
<option name="Make" enabled="true" />
|
||||||
|
@@ -18,9 +18,10 @@ __域名__ : localhost:8090
|
|||||||
|
|
||||||
=== 标签
|
=== 标签
|
||||||
|
|
||||||
* book-controller : Book Controller
|
* 书籍信息 : Book Controller
|
||||||
* status-controller : Status Controller
|
* 书籍分类信息 : Category Controller
|
||||||
* user-controller : User Controller
|
* 用户操作 : User Controller
|
||||||
|
* 网站后台状态检测 : Status Controller
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -28,8 +29,8 @@ __域名__ : localhost:8090
|
|||||||
[[_paths]]
|
[[_paths]]
|
||||||
== 资源
|
== 资源
|
||||||
|
|
||||||
[[_book-controller_resource]]
|
[[_261c63557a0a2affe4e9ee7cf30075c0]]
|
||||||
=== Book-controller
|
=== 书籍信息
|
||||||
Book Controller
|
Book Controller
|
||||||
|
|
||||||
|
|
||||||
@@ -91,20 +92,35 @@ __必填__|id|integer (int32)
|
|||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
[[_status-controller_resource]]
|
[[_searchusingget]]
|
||||||
=== Status-controller
|
==== 查询书籍列表
|
||||||
Status Controller
|
|
||||||
|
|
||||||
|
|
||||||
[[_getusingget_1]]
|
|
||||||
==== 系统状态
|
|
||||||
....
|
....
|
||||||
GET /api/status/get
|
GET /api/book/search
|
||||||
....
|
....
|
||||||
|
|
||||||
|
|
||||||
===== 说明
|
===== 说明
|
||||||
获取服务器当前系统负载。SystemLoadAverage返回-1时代表不支持。
|
通过指定条件查询书籍列表
|
||||||
|
|
||||||
|
|
||||||
|
===== 参数
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^3a,.^9a,.^4a"]
|
||||||
|
|===
|
||||||
|
|类型|名称|说明|类型
|
||||||
|
|**Query**|**author** +
|
||||||
|
__可选__|author|string
|
||||||
|
|**Query**|**bookName** +
|
||||||
|
__可选__|bookName|string
|
||||||
|
|**Query**|**categoryId** +
|
||||||
|
__可选__|categoryId|integer (int32)
|
||||||
|
|**Query**|**id** +
|
||||||
|
__可选__|id|integer (int32)
|
||||||
|
|**Query**|**language** +
|
||||||
|
__可选__|language|string
|
||||||
|
|**Query**|**publishingHouse** +
|
||||||
|
__可选__|publishingHouse|string
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
===== 响应
|
===== 响应
|
||||||
@@ -128,7 +144,7 @@ GET /api/status/get
|
|||||||
|
|
||||||
====== 请求 path
|
====== 请求 path
|
||||||
----
|
----
|
||||||
/api/status/get
|
/api/book/search
|
||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
@@ -144,11 +160,132 @@ GET /api/status/get
|
|||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
[[_user-controller_resource]]
|
[[_82c2171949c312f17a084ab9b31e7d55]]
|
||||||
=== User-controller
|
=== 书籍分类信息
|
||||||
|
Category Controller
|
||||||
|
|
||||||
|
|
||||||
|
[[_getusingget_1]]
|
||||||
|
==== 获取书籍分类
|
||||||
|
....
|
||||||
|
GET /api/category/get
|
||||||
|
....
|
||||||
|
|
||||||
|
|
||||||
|
===== 说明
|
||||||
|
获取书籍分类
|
||||||
|
|
||||||
|
|
||||||
|
===== 参数
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^3a,.^9a,.^4a"]
|
||||||
|
|===
|
||||||
|
|类型|名称|说明|类型
|
||||||
|
|**Query**|**id** +
|
||||||
|
__必填__|id|integer (int32)
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 响应
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^14a,.^4a"]
|
||||||
|
|===
|
||||||
|
|HTTP代码|说明|类型
|
||||||
|
|**200**|OK|<<_commonreturntype,CommonReturnType>>
|
||||||
|
|**401**|Unauthorized|无内容
|
||||||
|
|**403**|Forbidden|无内容
|
||||||
|
|**404**|Not Found|无内容
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 生成
|
||||||
|
|
||||||
|
* `\*/*`
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP请求示例
|
||||||
|
|
||||||
|
====== 请求 path
|
||||||
|
----
|
||||||
|
/api/category/get?id=0
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP响应示例
|
||||||
|
|
||||||
|
====== 响应 200
|
||||||
|
[source,json]
|
||||||
|
----
|
||||||
|
{
|
||||||
|
"data" : "object",
|
||||||
|
"status" : "string"
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
[[_9083a36b9e1b060bcb75ff62bb4bda37]]
|
||||||
|
=== 用户操作
|
||||||
User Controller
|
User Controller
|
||||||
|
|
||||||
|
|
||||||
|
[[_getuserstatususingget]]
|
||||||
|
==== 获取用户登录状态
|
||||||
|
....
|
||||||
|
GET /api/user/getUserStatus
|
||||||
|
....
|
||||||
|
|
||||||
|
|
||||||
|
===== 说明
|
||||||
|
获取用户登录状态
|
||||||
|
|
||||||
|
|
||||||
|
===== 参数
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^3a,.^9a,.^4a"]
|
||||||
|
|===
|
||||||
|
|类型|名称|说明|类型
|
||||||
|
|**Query**|**token** +
|
||||||
|
__必填__|token|string
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 响应
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^14a,.^4a"]
|
||||||
|
|===
|
||||||
|
|HTTP代码|说明|类型
|
||||||
|
|**200**|OK|<<_commonreturntype,CommonReturnType>>
|
||||||
|
|**401**|Unauthorized|无内容
|
||||||
|
|**403**|Forbidden|无内容
|
||||||
|
|**404**|Not Found|无内容
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 生成
|
||||||
|
|
||||||
|
* `\*/*`
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP请求示例
|
||||||
|
|
||||||
|
====== 请求 path
|
||||||
|
----
|
||||||
|
/api/user/getUserStatus?token=string
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP响应示例
|
||||||
|
|
||||||
|
====== 响应 200
|
||||||
|
[source,json]
|
||||||
|
----
|
||||||
|
{
|
||||||
|
"data" : "object",
|
||||||
|
"status" : "string"
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
[[_loginusingpost]]
|
[[_loginusingpost]]
|
||||||
==== 用户登录
|
==== 用户登录
|
||||||
....
|
....
|
||||||
@@ -157,7 +294,7 @@ POST /api/user/login
|
|||||||
|
|
||||||
|
|
||||||
===== 说明
|
===== 说明
|
||||||
传入用户名,以及密码的MD5值,进行登录
|
传入用户名,以及密码明文,后台计算密码SHA1值,进行登录
|
||||||
|
|
||||||
|
|
||||||
===== 参数
|
===== 参数
|
||||||
@@ -165,7 +302,7 @@ POST /api/user/login
|
|||||||
[options="header", cols=".^2a,.^3a,.^4a"]
|
[options="header", cols=".^2a,.^3a,.^4a"]
|
||||||
|===
|
|===
|
||||||
|类型|名称|类型
|
|类型|名称|类型
|
||||||
|**FormData**|**encryptpwd** +
|
|**FormData**|**password** +
|
||||||
__可选__|string
|
__可选__|string
|
||||||
|**FormData**|**username** +
|
|**FormData**|**username** +
|
||||||
__可选__|string
|
__可选__|string
|
||||||
@@ -222,6 +359,117 @@ __可选__|string
|
|||||||
----
|
----
|
||||||
|
|
||||||
|
|
||||||
|
[[_logoutusingget]]
|
||||||
|
==== 用户登出
|
||||||
|
....
|
||||||
|
GET /api/user/logout
|
||||||
|
....
|
||||||
|
|
||||||
|
|
||||||
|
===== 说明
|
||||||
|
用户退出登录
|
||||||
|
|
||||||
|
|
||||||
|
===== 参数
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^3a,.^9a,.^4a"]
|
||||||
|
|===
|
||||||
|
|类型|名称|说明|类型
|
||||||
|
|**Query**|**token** +
|
||||||
|
__必填__|token|string
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 响应
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^14a,.^4a"]
|
||||||
|
|===
|
||||||
|
|HTTP代码|说明|类型
|
||||||
|
|**200**|OK|<<_commonreturntype,CommonReturnType>>
|
||||||
|
|**401**|Unauthorized|无内容
|
||||||
|
|**403**|Forbidden|无内容
|
||||||
|
|**404**|Not Found|无内容
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 生成
|
||||||
|
|
||||||
|
* `\*/*`
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP请求示例
|
||||||
|
|
||||||
|
====== 请求 path
|
||||||
|
----
|
||||||
|
/api/user/logout?token=string
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP响应示例
|
||||||
|
|
||||||
|
====== 响应 200
|
||||||
|
[source,json]
|
||||||
|
----
|
||||||
|
{
|
||||||
|
"data" : "object",
|
||||||
|
"status" : "string"
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
[[_908e76a1e64eba3a29d68b89ae1eb608]]
|
||||||
|
=== 网站后台状态检测
|
||||||
|
Status Controller
|
||||||
|
|
||||||
|
|
||||||
|
[[_getusingget_2]]
|
||||||
|
==== 系统状态
|
||||||
|
....
|
||||||
|
GET /api/status/get
|
||||||
|
....
|
||||||
|
|
||||||
|
|
||||||
|
===== 说明
|
||||||
|
获取服务器当前系统负载。SystemLoadAverage返回-1时代表不支持。
|
||||||
|
|
||||||
|
|
||||||
|
===== 响应
|
||||||
|
|
||||||
|
[options="header", cols=".^2a,.^14a,.^4a"]
|
||||||
|
|===
|
||||||
|
|HTTP代码|说明|类型
|
||||||
|
|**200**|OK|<<_commonreturntype,CommonReturnType>>
|
||||||
|
|**401**|Unauthorized|无内容
|
||||||
|
|**403**|Forbidden|无内容
|
||||||
|
|**404**|Not Found|无内容
|
||||||
|
|===
|
||||||
|
|
||||||
|
|
||||||
|
===== 生成
|
||||||
|
|
||||||
|
* `\*/*`
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP请求示例
|
||||||
|
|
||||||
|
====== 请求 path
|
||||||
|
----
|
||||||
|
/api/status/get
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
===== HTTP响应示例
|
||||||
|
|
||||||
|
====== 响应 200
|
||||||
|
[source,json]
|
||||||
|
----
|
||||||
|
{
|
||||||
|
"data" : "object",
|
||||||
|
"status" : "string"
|
||||||
|
}
|
||||||
|
----
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[_definitions]]
|
[[_definitions]]
|
||||||
|
@@ -531,9 +531,10 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</li>
|
</li>
|
||||||
<li><a href="#_paths">2. 资源</a>
|
<li><a href="#_paths">2. 资源</a>
|
||||||
<ul class="sectlevel2">
|
<ul class="sectlevel2">
|
||||||
<li><a href="#_book-controller_resource">2.1. Book-controller</a></li>
|
<li><a href="#_261c63557a0a2affe4e9ee7cf30075c0">2.1. 书籍信息</a></li>
|
||||||
<li><a href="#_status-controller_resource">2.2. Status-controller</a></li>
|
<li><a href="#_82c2171949c312f17a084ab9b31e7d55">2.2. 书籍分类信息</a></li>
|
||||||
<li><a href="#_user-controller_resource">2.3. User-controller</a></li>
|
<li><a href="#_9083a36b9e1b060bcb75ff62bb4bda37">2.3. 用户操作</a></li>
|
||||||
|
<li><a href="#_908e76a1e64eba3a29d68b89ae1eb608">2.4. 网站后台状态检测</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a href="#_definitions">3. 定义</a>
|
<li><a href="#_definitions">3. 定义</a>
|
||||||
@@ -568,13 +569,16 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<div class="ulist">
|
<div class="ulist">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<p>book-controller : Book Controller</p>
|
<p>书籍信息 : Book Controller</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>status-controller : Status Controller</p>
|
<p>书籍分类信息 : Category Controller</p>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<p>user-controller : User Controller</p>
|
<p>用户操作 : User Controller</p>
|
||||||
|
</li>
|
||||||
|
<li>
|
||||||
|
<p>网站后台状态检测 : Status Controller</p>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
@@ -585,7 +589,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<h2 id="_paths">2. 资源</h2>
|
<h2 id="_paths">2. 资源</h2>
|
||||||
<div class="sectionbody">
|
<div class="sectionbody">
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_book-controller_resource">2.1. Book-controller</h3>
|
<h3 id="_261c63557a0a2affe4e9ee7cf30075c0">2.1. 书籍信息</h3>
|
||||||
<div class="paragraph">
|
<div class="paragraph">
|
||||||
<p>Book Controller</p>
|
<p>Book Controller</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -737,26 +741,131 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
<div class="sect2">
|
|
||||||
<h3 id="_status-controller_resource">2.2. Status-controller</h3>
|
|
||||||
<div class="paragraph">
|
|
||||||
<p>Status Controller</p>
|
|
||||||
</div>
|
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_getusingget_1">2.2.1. 系统状态</h4>
|
<h4 id="_searchusingget">2.1.2. 查询书籍列表</h4>
|
||||||
<div class="literalblock">
|
<div class="literalblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre>GET /api/status/get</pre>
|
<pre>GET /api/book/search</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_说明_2">说明</h5>
|
<h5 id="_说明_2">说明</h5>
|
||||||
<div class="paragraph">
|
<div class="paragraph">
|
||||||
<p>获取服务器当前系统负载。SystemLoadAverage返回-1时代表不支持。</p>
|
<p>通过指定条件查询书籍列表</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
|
<h5 id="_参数_2">参数</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 11.1111%;">
|
||||||
|
<col style="width: 16.6666%;">
|
||||||
|
<col style="width: 50%;">
|
||||||
|
<col style="width: 22.2223%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">名称</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>author</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>author</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>bookName</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>bookName</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>categoryId</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>categoryId</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>integer (int32)</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>id</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>id</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>integer (int32)</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>language</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>language</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>publishingHouse</strong><br>
|
||||||
|
<em>可选</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>publishingHouse</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
<h5 id="_响应_2">响应</h5>
|
<h5 id="_响应_2">响应</h5>
|
||||||
<table class="tableblock frame-all grid-all spread">
|
<table class="tableblock frame-all grid-all spread">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
@@ -835,7 +944,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<h6 id="_请求_path_2">请求 path</h6>
|
<h6 id="_请求_path_2">请求 path</h6>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre>/api/status/get</pre>
|
<pre>/api/book/search</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
@@ -857,25 +966,327 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect2">
|
<div class="sect2">
|
||||||
<h3 id="_user-controller_resource">2.3. User-controller</h3>
|
<h3 id="_82c2171949c312f17a084ab9b31e7d55">2.2. 书籍分类信息</h3>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>Category Controller</p>
|
||||||
|
</div>
|
||||||
|
<div class="sect3">
|
||||||
|
<h4 id="_getusingget_1">2.2.1. 获取书籍分类</h4>
|
||||||
|
<div class="literalblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>GET /api/category/get</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_说明_3">说明</h5>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>获取书籍分类</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_参数_3">参数</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 11.1111%;">
|
||||||
|
<col style="width: 16.6666%;">
|
||||||
|
<col style="width: 50%;">
|
||||||
|
<col style="width: 22.2223%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">名称</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>id</strong><br>
|
||||||
|
<em>必填</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>id</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>integer (int32)</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_响应_3">响应</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 70%;">
|
||||||
|
<col style="width: 20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">HTTP代码</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>200</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>OK</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><a href="#_commonreturntype">CommonReturnType</a></p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>401</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Unauthorized</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>403</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Forbidden</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>404</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Not Found</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_生成_3">生成</h5>
|
||||||
|
<div class="ulist">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><code>*/*</code></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http请求示例_3">HTTP请求示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_请求_path_3">请求 path</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>/api/category/get?id=0</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http响应示例_3">HTTP响应示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_响应_200_3">响应 200</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre class="CodeRay highlight"><code data-lang="json">{
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">data</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">object</span><span class="delimiter">"</span></span>,
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">status</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">string</span><span class="delimiter">"</span></span>
|
||||||
|
}</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_9083a36b9e1b060bcb75ff62bb4bda37">2.3. 用户操作</h3>
|
||||||
<div class="paragraph">
|
<div class="paragraph">
|
||||||
<p>User Controller</p>
|
<p>User Controller</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect3">
|
<div class="sect3">
|
||||||
<h4 id="_loginusingpost">2.3.1. 用户登录</h4>
|
<h4 id="_getuserstatususingget">2.3.1. 获取用户登录状态</h4>
|
||||||
|
<div class="literalblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>GET /api/user/getUserStatus</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_说明_4">说明</h5>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>获取用户登录状态</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_参数_4">参数</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 11.1111%;">
|
||||||
|
<col style="width: 16.6666%;">
|
||||||
|
<col style="width: 50%;">
|
||||||
|
<col style="width: 22.2223%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">名称</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>token</strong><br>
|
||||||
|
<em>必填</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>token</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_响应_4">响应</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 70%;">
|
||||||
|
<col style="width: 20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">HTTP代码</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>200</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>OK</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><a href="#_commonreturntype">CommonReturnType</a></p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>401</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Unauthorized</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>403</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Forbidden</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>404</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Not Found</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_生成_4">生成</h5>
|
||||||
|
<div class="ulist">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><code>*/*</code></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http请求示例_4">HTTP请求示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_请求_path_4">请求 path</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>/api/user/getUserStatus?token=string</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http响应示例_4">HTTP响应示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_响应_200_4">响应 200</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre class="CodeRay highlight"><code data-lang="json">{
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">data</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">object</span><span class="delimiter">"</span></span>,
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">status</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">string</span><span class="delimiter">"</span></span>
|
||||||
|
}</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect3">
|
||||||
|
<h4 id="_loginusingpost">2.3.2. 用户登录</h4>
|
||||||
<div class="literalblock">
|
<div class="literalblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre>POST /api/user/login</pre>
|
<pre>POST /api/user/login</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_说明_3">说明</h5>
|
<h5 id="_说明_5">说明</h5>
|
||||||
<div class="paragraph">
|
<div class="paragraph">
|
||||||
<p>传入用户名,以及密码的MD5值,进行登录</p>
|
<p>传入用户名,以及密码明文,后台计算密码SHA1值,进行登录</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_参数_2">参数</h5>
|
<h5 id="_参数_5">参数</h5>
|
||||||
<table class="tableblock frame-all grid-all spread">
|
<table class="tableblock frame-all grid-all spread">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 22.2222%;">
|
<col style="width: 22.2222%;">
|
||||||
@@ -895,7 +1306,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
<p><strong>FormData</strong></p>
|
<p><strong>FormData</strong></p>
|
||||||
</div></div></td>
|
</div></div></td>
|
||||||
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
<p><strong>encryptpwd</strong><br>
|
<p><strong>password</strong><br>
|
||||||
<em>可选</em></p>
|
<em>可选</em></p>
|
||||||
</div></div></td>
|
</div></div></td>
|
||||||
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
@@ -918,7 +1329,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_响应_3">响应</h5>
|
<h5 id="_响应_5">响应</h5>
|
||||||
<table class="tableblock frame-all grid-all spread">
|
<table class="tableblock frame-all grid-all spread">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col style="width: 10%;">
|
<col style="width: 10%;">
|
||||||
@@ -1002,7 +1413,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_生成_3">生成</h5>
|
<h5 id="_生成_5">生成</h5>
|
||||||
<div class="ulist">
|
<div class="ulist">
|
||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
@@ -1012,9 +1423,9 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_http请求示例_3">HTTP请求示例</h5>
|
<h5 id="_http请求示例_5">HTTP请求示例</h5>
|
||||||
<div class="sect5">
|
<div class="sect5">
|
||||||
<h6 id="_请求_path_3">请求 path</h6>
|
<h6 id="_请求_path_5">请求 path</h6>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre>/api/user/login</pre>
|
<pre>/api/user/login</pre>
|
||||||
@@ -1031,9 +1442,275 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="sect4">
|
<div class="sect4">
|
||||||
<h5 id="_http响应示例_3">HTTP响应示例</h5>
|
<h5 id="_http响应示例_5">HTTP响应示例</h5>
|
||||||
<div class="sect5">
|
<div class="sect5">
|
||||||
<h6 id="_响应_200_3">响应 200</h6>
|
<h6 id="_响应_200_5">响应 200</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre class="CodeRay highlight"><code data-lang="json">{
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">data</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">object</span><span class="delimiter">"</span></span>,
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">status</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">string</span><span class="delimiter">"</span></span>
|
||||||
|
}</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect3">
|
||||||
|
<h4 id="_logoutusingget">2.3.3. 用户登出</h4>
|
||||||
|
<div class="literalblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>GET /api/user/logout</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_说明_6">说明</h5>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>用户退出登录</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_参数_6">参数</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 11.1111%;">
|
||||||
|
<col style="width: 16.6666%;">
|
||||||
|
<col style="width: 50%;">
|
||||||
|
<col style="width: 22.2223%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">名称</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>Query</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>token</strong><br>
|
||||||
|
<em>必填</em></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>token</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>string</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_响应_6">响应</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 70%;">
|
||||||
|
<col style="width: 20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">HTTP代码</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>200</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>OK</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><a href="#_commonreturntype">CommonReturnType</a></p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>401</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Unauthorized</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>403</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Forbidden</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>404</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Not Found</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_生成_6">生成</h5>
|
||||||
|
<div class="ulist">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><code>*/*</code></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http请求示例_6">HTTP请求示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_请求_path_6">请求 path</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>/api/user/logout?token=string</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http响应示例_6">HTTP响应示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_响应_200_6">响应 200</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre class="CodeRay highlight"><code data-lang="json">{
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">data</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">object</span><span class="delimiter">"</span></span>,
|
||||||
|
<span class="key"><span class="delimiter">"</span><span class="content">status</span><span class="delimiter">"</span></span> : <span class="string"><span class="delimiter">"</span><span class="content">string</span><span class="delimiter">"</span></span>
|
||||||
|
}</code></pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect2">
|
||||||
|
<h3 id="_908e76a1e64eba3a29d68b89ae1eb608">2.4. 网站后台状态检测</h3>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>Status Controller</p>
|
||||||
|
</div>
|
||||||
|
<div class="sect3">
|
||||||
|
<h4 id="_getusingget_2">2.4.1. 系统状态</h4>
|
||||||
|
<div class="literalblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>GET /api/status/get</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_说明_7">说明</h5>
|
||||||
|
<div class="paragraph">
|
||||||
|
<p>获取服务器当前系统负载。SystemLoadAverage返回-1时代表不支持。</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_响应_7">响应</h5>
|
||||||
|
<table class="tableblock frame-all grid-all spread">
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 10%;">
|
||||||
|
<col style="width: 70%;">
|
||||||
|
<col style="width: 20%;">
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th class="tableblock halign-left valign-middle">HTTP代码</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">说明</th>
|
||||||
|
<th class="tableblock halign-left valign-middle">类型</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>200</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>OK</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><a href="#_commonreturntype">CommonReturnType</a></p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>401</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Unauthorized</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>403</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Forbidden</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p><strong>404</strong></p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>Not Found</p>
|
||||||
|
</div></div></td>
|
||||||
|
<td class="tableblock halign-left valign-middle"><div><div class="paragraph">
|
||||||
|
<p>无内容</p>
|
||||||
|
</div></div></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_生成_7">生成</h5>
|
||||||
|
<div class="ulist">
|
||||||
|
<ul>
|
||||||
|
<li>
|
||||||
|
<p><code>*/*</code></p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http请求示例_7">HTTP请求示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_请求_path_7">请求 path</h6>
|
||||||
|
<div class="listingblock">
|
||||||
|
<div class="content">
|
||||||
|
<pre>/api/status/get</pre>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="sect4">
|
||||||
|
<h5 id="_http响应示例_7">HTTP响应示例</h5>
|
||||||
|
<div class="sect5">
|
||||||
|
<h6 id="_响应_200_7">响应 200</h6>
|
||||||
<div class="listingblock">
|
<div class="listingblock">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<pre class="CodeRay highlight"><code data-lang="json">{
|
<pre class="CodeRay highlight"><code data-lang="json">{
|
||||||
@@ -1099,7 +1776,7 @@ table.CodeRay td.code>pre{padding:0}
|
|||||||
</div>
|
</div>
|
||||||
<div id="footer">
|
<div id="footer">
|
||||||
<div id="footer-text">
|
<div id="footer-text">
|
||||||
Last updated 2022-03-15 14:14:39 SGT
|
Last updated 2022-04-01 19:36:14 SGT
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
|
@@ -81,7 +81,7 @@
|
|||||||
|
|
||||||
<!--参数验证-->
|
<!--参数验证-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.hibernate</groupId>
|
<groupId>org.hibernate.validator</groupId>
|
||||||
<artifactId>hibernate-validator</artifactId>
|
<artifactId>hibernate-validator</artifactId>
|
||||||
<version>6.2.3.Final</version>
|
<version>6.2.3.Final</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
@@ -94,17 +94,17 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<!--引入SpringBoot对Redis的依赖-->
|
<!--引入SpringBoot对Redis的依赖-->
|
||||||
<!-- <dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||||
</dependency> -->
|
</dependency>
|
||||||
|
|
||||||
<!--SpringBoot将Session存储在Redis中-->
|
<!--SpringBoot将Session存储在Redis中-->
|
||||||
<!-- <dependency>
|
<dependency>
|
||||||
<groupId>org.springframework.session</groupId>
|
<groupId>org.springframework.session</groupId>
|
||||||
<artifactId>spring-session-data-redis</artifactId>
|
<artifactId>spring-session-data-redis</artifactId>
|
||||||
<version>2.0.5.RELEASE</version>
|
<version>2.0.5.RELEASE</version>
|
||||||
</dependency> -->
|
</dependency>
|
||||||
|
|
||||||
<!-- lombok -->
|
<!-- lombok -->
|
||||||
<dependency>
|
<dependency>
|
||||||
@@ -172,6 +172,12 @@
|
|||||||
<version>1.4.1</version>
|
<version>1.4.1</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- NanoID (用于替换 uuid ) -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>com.aventrix.jnanoid</groupId>
|
||||||
|
<artifactId>jnanoid</artifactId>
|
||||||
|
<version>2.0.0</version>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
|
|
||||||
<build>
|
<build>
|
||||||
|
@@ -8,7 +8,8 @@ public enum BusinessErrorCode implements CommonError {
|
|||||||
// 20000开头为用户信息相关错误定义
|
// 20000开头为用户信息相关错误定义
|
||||||
USER_NOT_EXIST(20001, "用户不存在"),
|
USER_NOT_EXIST(20001, "用户不存在"),
|
||||||
USER_LOGIN_FAILED(20002, "用户手机号或密码不正确"),
|
USER_LOGIN_FAILED(20002, "用户手机号或密码不正确"),
|
||||||
USER_NOT_LOGIN(20003, "用户还未登录");
|
USER_NOT_LOGIN(20003, "用户还未登录"),
|
||||||
|
USER_TOKEN_EXPIRED(20004, "用户令牌过期");
|
||||||
|
|
||||||
|
|
||||||
private BusinessErrorCode(int errCode, String errMsg) {
|
private BusinessErrorCode(int errCode, String errMsg) {
|
||||||
|
@@ -0,0 +1,53 @@
|
|||||||
|
package plus.bookshelf.Common.SessionManager;
|
||||||
|
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
|
|
||||||
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
public class RedisSessionManager implements SessionManager {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 私有化构造函数
|
||||||
|
*/
|
||||||
|
private RedisSessionManager(RedisTemplate redisTemplate) {
|
||||||
|
this.redisTemplate = redisTemplate;
|
||||||
|
}
|
||||||
|
|
||||||
|
static SessionManager sessionManager = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过此方法获取当前类的实例
|
||||||
|
*
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
public static SessionManager getInstance(RedisTemplate redisTemplate) {
|
||||||
|
if (sessionManager == null)
|
||||||
|
sessionManager = new RedisSessionManager(redisTemplate);
|
||||||
|
return sessionManager;
|
||||||
|
}
|
||||||
|
|
||||||
|
static RedisTemplate redisTemplate = null;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getValue(String key) {
|
||||||
|
try {
|
||||||
|
return redisTemplate.opsForValue().get(key);
|
||||||
|
} catch (Exception e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setValue(String key, Object value) {
|
||||||
|
redisTemplate.expire(key, 1, TimeUnit.HOURS);
|
||||||
|
|
||||||
|
// 建立token和用户登录态之间的联系
|
||||||
|
redisTemplate.opsForValue().set(key, value);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void remove(String key) {
|
||||||
|
redisTemplate.delete(key);
|
||||||
|
}
|
||||||
|
}
|
@@ -1,6 +1,8 @@
|
|||||||
package plus.bookshelf.Controller.Controller;
|
package plus.bookshelf.Controller.Controller;
|
||||||
|
|
||||||
|
import com.aventrix.jnanoid.jnanoid.NanoIdUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
import org.springframework.data.redis.core.RedisTemplate;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
import org.springframework.web.bind.annotation.ResponseBody;
|
||||||
@@ -10,17 +12,23 @@ import plus.bookshelf.Common.Error.BusinessException;
|
|||||||
import plus.bookshelf.Common.Response.CommonReturnType;
|
import plus.bookshelf.Common.Response.CommonReturnType;
|
||||||
import plus.bookshelf.Common.Response.CommonReturnTypeStatus;
|
import plus.bookshelf.Common.Response.CommonReturnTypeStatus;
|
||||||
import plus.bookshelf.Common.SessionManager.LocalSessionManager;
|
import plus.bookshelf.Common.SessionManager.LocalSessionManager;
|
||||||
|
import plus.bookshelf.Common.SessionManager.RedisSessionManager;
|
||||||
import plus.bookshelf.Common.SessionManager.SessionManager;
|
import plus.bookshelf.Common.SessionManager.SessionManager;
|
||||||
import plus.bookshelf.Service.Model.UserModel;
|
import plus.bookshelf.Service.Model.UserModel;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.UUID;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class BaseController {
|
public class BaseController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
HttpServletRequest httpServletRequest;
|
HttpServletRequest httpServletRequest;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
RedisTemplate redisTemplate;
|
||||||
|
|
||||||
// content-type 常量
|
// content-type 常量
|
||||||
public static final String CONTENT_TYPE_FORMED = "application/x-www-form-urlencoded";
|
public static final String CONTENT_TYPE_FORMED = "application/x-www-form-urlencoded";
|
||||||
|
|
||||||
@@ -28,15 +36,15 @@ public class BaseController {
|
|||||||
public static final Integer COMMON_START_PAGE = 1;
|
public static final Integer COMMON_START_PAGE = 1;
|
||||||
public static final Integer COMMON_PAGE_SIZE = 10;
|
public static final Integer COMMON_PAGE_SIZE = 10;
|
||||||
|
|
||||||
// @Autowired
|
|
||||||
// private RedisTemplate redisTemplate;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取用户登陆状态
|
* 获取用户登陆状态
|
||||||
*/
|
*/
|
||||||
public Boolean isLogin() {
|
public Boolean isLogin() {
|
||||||
SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
SessionManager sessionManager = RedisSessionManager.getInstance(redisTemplate);
|
||||||
return (Boolean) sessionManager.getValue("IS_LOGIN");
|
return (Boolean) sessionManager.getValue("IS_LOGIN");
|
||||||
|
|
||||||
|
// SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
||||||
|
// return (Boolean) sessionManager.getValue("IS_LOGIN");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -44,28 +52,30 @@ public class BaseController {
|
|||||||
*
|
*
|
||||||
* @return String uuidToken
|
* @return String uuidToken
|
||||||
*/
|
*/
|
||||||
public void onLogin(UserModel userModel) {
|
public String onLogin(UserModel userModel) {
|
||||||
// String uuidToken = UUID.randomUUID().toString();
|
String token = NanoIdUtils.randomNanoId(); // UUID.randomUUID().toString();
|
||||||
// redisTemplate.expire(uuidToken, 1, TimeUnit.HOURS);
|
SessionManager sessionManager = RedisSessionManager.getInstance(redisTemplate);
|
||||||
|
sessionManager.setValue(token, userModel.getId());
|
||||||
|
return token;
|
||||||
|
|
||||||
// // 建立token和用户登录态之间的联系
|
// SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
||||||
// redisTemplate.opsForValue().set(uuidToken, userModel);
|
// sessionManager.setValue("IS_LOGIN", true);
|
||||||
// return uuidToken;
|
// sessionManager.setValue("user", userModel);
|
||||||
|
// return;
|
||||||
SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
|
||||||
sessionManager.setValue("IS_LOGIN", true);
|
|
||||||
sessionManager.setValue("user", userModel);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户退出登录
|
* 用户退出登录
|
||||||
*/
|
*/
|
||||||
public void onLogout() {
|
public void onLogout(String token) {
|
||||||
SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
SessionManager sessionManager = RedisSessionManager.getInstance(redisTemplate);
|
||||||
sessionManager.setValue("IS_LOGIN", false);
|
sessionManager.remove(token);
|
||||||
sessionManager.remove("user");
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
// SessionManager sessionManager = LocalSessionManager.getInstance(httpServletRequest);
|
||||||
|
// sessionManager.setValue("IS_LOGIN", false);
|
||||||
|
// sessionManager.remove("user");
|
||||||
|
// return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// 定义ExceptionHandler解决未被Controller层吸收的Exception
|
// 定义ExceptionHandler解决未被Controller层吸收的Exception
|
||||||
|
@@ -18,7 +18,7 @@ import plus.bookshelf.Service.Service.BookService;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@Api(value = "书籍")
|
@Api(tags = "书籍信息")
|
||||||
@Controller("book")
|
@Controller("book")
|
||||||
@RequestMapping("/book")
|
@RequestMapping("/book")
|
||||||
public class BookController extends BaseController {
|
public class BookController extends BaseController {
|
||||||
|
@@ -17,7 +17,7 @@ import plus.bookshelf.Service.Model.CategoryModel;
|
|||||||
import plus.bookshelf.Service.Service.BookService;
|
import plus.bookshelf.Service.Service.BookService;
|
||||||
import plus.bookshelf.Service.Service.CategoryService;
|
import plus.bookshelf.Service.Service.CategoryService;
|
||||||
|
|
||||||
@Api(value = "书籍分类")
|
@Api(tags = "书籍分类信息")
|
||||||
@Controller("category")
|
@Controller("category")
|
||||||
@RequestMapping("/category")
|
@RequestMapping("/category")
|
||||||
public class CategoryController extends BaseController {
|
public class CategoryController extends BaseController {
|
||||||
|
@@ -14,7 +14,7 @@ import java.math.BigDecimal;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@Api(value = "状态检测")
|
@Api(tags = "网站后台状态检测")
|
||||||
@Controller("status")
|
@Controller("status")
|
||||||
@RequestMapping("/status")
|
@RequestMapping("/status")
|
||||||
public class StatusController extends BaseController {
|
public class StatusController extends BaseController {
|
||||||
|
@@ -1,22 +1,25 @@
|
|||||||
package plus.bookshelf.Controller.Controller;
|
package plus.bookshelf.Controller.Controller;
|
||||||
|
|
||||||
import io.swagger.annotations.Api;
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiImplicitParam;
|
||||||
|
import io.swagger.annotations.ApiImplicitParams;
|
||||||
import io.swagger.annotations.ApiOperation;
|
import io.swagger.annotations.ApiOperation;
|
||||||
import org.apache.commons.codec.digest.DigestUtils;
|
import org.apache.commons.codec.digest.DigestUtils;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Controller;
|
import org.springframework.stereotype.Controller;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.RequestMethod;
|
import plus.bookshelf.Common.Error.BusinessErrorCode;
|
||||||
import org.springframework.web.bind.annotation.RequestParam;
|
import plus.bookshelf.Common.Error.BusinessException;
|
||||||
import org.springframework.web.bind.annotation.ResponseBody;
|
|
||||||
import plus.bookshelf.Common.Response.CommonReturnType;
|
import plus.bookshelf.Common.Response.CommonReturnType;
|
||||||
import plus.bookshelf.Common.SessionManager.LocalSessionManager;
|
import plus.bookshelf.Common.SessionManager.LocalSessionManager;
|
||||||
|
import plus.bookshelf.Common.SessionManager.RedisSessionManager;
|
||||||
import plus.bookshelf.Controller.VO.UserVO;
|
import plus.bookshelf.Controller.VO.UserVO;
|
||||||
|
import plus.bookshelf.Dao.Mapper.UserDOMapper;
|
||||||
import plus.bookshelf.Service.Impl.UserServiceImpl;
|
import plus.bookshelf.Service.Impl.UserServiceImpl;
|
||||||
import plus.bookshelf.Service.Model.UserModel;
|
import plus.bookshelf.Service.Model.UserModel;
|
||||||
|
|
||||||
@Api(value = "用户")
|
@Api(tags = "用户操作")
|
||||||
@Controller
|
@Controller
|
||||||
@RequestMapping("/user")
|
@RequestMapping("/user")
|
||||||
public class UserController extends BaseController {
|
public class UserController extends BaseController {
|
||||||
@@ -25,12 +28,16 @@ public class UserController extends BaseController {
|
|||||||
UserServiceImpl userService;
|
UserServiceImpl userService;
|
||||||
|
|
||||||
@ApiOperation(value = "用户登录", notes = "传入用户名,以及密码明文,后台计算密码SHA1值,进行登录")
|
@ApiOperation(value = "用户登录", notes = "传入用户名,以及密码明文,后台计算密码SHA1值,进行登录")
|
||||||
|
// @ApiImplicitParams(value = {
|
||||||
|
// @ApiImplicitParam(name = "username", value = "用户名", example = "username1", paramType = "form", dataType = "String", required = true, dataTypeClass = String.class),
|
||||||
|
// @ApiImplicitParam(name = "password", value = "密码", example = "password1", paramType = "form", dataType = "String", required = true, dataTypeClass = String.class)
|
||||||
|
// })
|
||||||
@RequestMapping(value = "login", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})
|
@RequestMapping(value = "login", method = {RequestMethod.POST}, consumes = {CONTENT_TYPE_FORMED})
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public CommonReturnType login(@RequestParam(value = "username") String username,
|
public CommonReturnType login(@RequestParam(value = "username") String username,
|
||||||
@RequestParam(value = "password") String password) {
|
@RequestParam(value = "password") String password) throws BusinessException {
|
||||||
if (username == null || password == null) {
|
if (username == null || password == null) {
|
||||||
return null;
|
throw new BusinessException(BusinessErrorCode.PARAMETER_VALIDATION_ERROR);
|
||||||
}
|
}
|
||||||
String encryptPwd = DigestUtils.sha1Hex(password);
|
String encryptPwd = DigestUtils.sha1Hex(password);
|
||||||
|
|
||||||
@@ -38,7 +45,8 @@ public class UserController extends BaseController {
|
|||||||
UserVO userVO = convertFromService(userModel);
|
UserVO userVO = convertFromService(userModel);
|
||||||
|
|
||||||
if (userModel != null) {
|
if (userModel != null) {
|
||||||
onLogin(userModel);
|
String token = onLogin(userModel);
|
||||||
|
userVO.setToken(token); // token 仅在用户登录时传一次,后面获取用户状态接口中不重复返回 token 信息
|
||||||
}
|
}
|
||||||
return CommonReturnType.create(userVO);
|
return CommonReturnType.create(userVO);
|
||||||
}
|
}
|
||||||
@@ -59,23 +67,40 @@ public class UserController extends BaseController {
|
|||||||
// }
|
// }
|
||||||
|
|
||||||
@ApiOperation(value = "用户登出", notes = "用户退出登录")
|
@ApiOperation(value = "用户登出", notes = "用户退出登录")
|
||||||
|
// @ApiImplicitParams({
|
||||||
|
// @ApiImplicitParam(name = "token", value = "用户token", required = true, dataType = "String")
|
||||||
|
// })
|
||||||
@RequestMapping(value = "logout", method = {RequestMethod.GET})
|
@RequestMapping(value = "logout", method = {RequestMethod.GET})
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public CommonReturnType logout() {
|
public CommonReturnType logout(@RequestParam(value = "token", required = false) String token) throws BusinessException {
|
||||||
onLogout();
|
// token 未传入
|
||||||
|
if (token == null || "".equals(token)) {
|
||||||
|
throw new BusinessException(BusinessErrorCode.PARAMETER_VALIDATION_ERROR, "用户令牌未传入");
|
||||||
|
}
|
||||||
|
|
||||||
|
onLogout(token);
|
||||||
return CommonReturnType.create("success");
|
return CommonReturnType.create("success");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiOperation(value = "获取用户登录状态", notes = "获取用户登录状态")
|
@ApiOperation(value = "获取用户登录状态", notes = "获取用户登录状态")
|
||||||
|
// @ApiImplicitParams({
|
||||||
|
// @ApiImplicitParam(name = "token", value = "用户token", required = true, dataType = "String")
|
||||||
|
// })
|
||||||
@RequestMapping(value = "getUserStatus", method = {RequestMethod.GET})
|
@RequestMapping(value = "getUserStatus", method = {RequestMethod.GET})
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public CommonReturnType getUserStatus() {
|
public CommonReturnType getUserStatus(@RequestParam(value = "token", required = false) String token) throws BusinessException {
|
||||||
Object userModelObject = LocalSessionManager.getInstance(httpServletRequest).getValue("user");
|
// token 未传入
|
||||||
if (userModelObject == null) {
|
if (token == null || "".equals(token)) {
|
||||||
return CommonReturnType.create(null);
|
throw new BusinessException(BusinessErrorCode.PARAMETER_VALIDATION_ERROR, "用户令牌未传入");
|
||||||
}
|
}
|
||||||
|
|
||||||
UserModel userModel = (UserModel) userModelObject;
|
// token 已过期
|
||||||
|
Object userIdObject = RedisSessionManager.getInstance(redisTemplate).getValue(token);
|
||||||
|
if (userIdObject == null) {
|
||||||
|
throw new BusinessException(BusinessErrorCode.USER_TOKEN_EXPIRED, "登陆过期啦,请重新登录");
|
||||||
|
}
|
||||||
|
Integer userId = (Integer) userIdObject;
|
||||||
|
UserModel userModel = userService.getUserById(userId);
|
||||||
UserVO userVO = convertFromService(userModel);
|
UserVO userVO = convertFromService(userModel);
|
||||||
return CommonReturnType.create(userVO);
|
return CommonReturnType.create(userVO);
|
||||||
}
|
}
|
||||||
|
@@ -22,4 +22,7 @@ public class UserVO {
|
|||||||
|
|
||||||
// 用户手机号
|
// 用户手机号
|
||||||
String phone;
|
String phone;
|
||||||
|
|
||||||
|
// 用户 token (NanoID)
|
||||||
|
String token;
|
||||||
}
|
}
|
||||||
|
@@ -21,6 +21,14 @@ public class UserServiceImpl implements UserService {
|
|||||||
return userModel;
|
return userModel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public UserModel getUserById(Integer id) {
|
||||||
|
UserDO userDO = userDOMapper.selectByPrimaryKey(id);
|
||||||
|
UserModel userModel = convertFromDataObject(userDO);
|
||||||
|
|
||||||
|
return userModel;
|
||||||
|
}
|
||||||
|
|
||||||
private UserModel convertFromDataObject(UserDO userDO) {
|
private UserModel convertFromDataObject(UserDO userDO) {
|
||||||
if (userDO == null) {
|
if (userDO == null) {
|
||||||
return null;
|
return null;
|
||||||
|
@@ -10,4 +10,11 @@ public interface UserService {
|
|||||||
* @param encryptPwd
|
* @param encryptPwd
|
||||||
*/
|
*/
|
||||||
UserModel userLogin(String username, String encryptPwd);
|
UserModel userLogin(String username, String encryptPwd);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过用户Id获取用户
|
||||||
|
* @param id 用户Id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
UserModel getUserById(Integer id);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user