feat: get、put、delete改post

This commit is contained in:
2025-04-09 18:19:04 +08:00
parent 06b34f00ae
commit 7fd6bd4e91
41 changed files with 437 additions and 211 deletions
+3 -3
View File
@@ -16,20 +16,20 @@ export function login(username, password, code, uuid) {
export function getInfo() { export function getInfo() {
return request({ return request({
url: 'auth/info', url: 'auth/info',
method: 'get' method: 'post'
}) })
} }
export function getCodeImg() { export function getCodeImg() {
return request({ return request({
url: 'auth/code', url: 'auth/code',
method: 'get' method: 'post'
}) })
} }
export function logout() { export function logout() {
return request({ return request({
url: 'auth/logout', url: 'auth/logout',
method: 'delete' method: 'post'
}) })
} }
+3 -3
View File
@@ -1,9 +1,9 @@
import request from '@/utils/request' import request from '@/utils/request'
export function del(keys) { export function kickOutUser(keys) {
return request({ return request({
url: 'auth/online', url: 'auth/online/kickOutUser',
method: 'delete', method: 'post',
data: keys data: keys
}) })
} }
@@ -24,18 +24,18 @@ export function edit(data) {
}) })
} }
export function updateIsPause(id) { export function switchJobPauseStatus(id) {
return request({ return request({
url: 'api/jobs/' + id, url: 'api/jobs/switchJobPauseStatus/' + id,
method: 'put' method: 'post'
}) })
} }
export function execution(id) { export function executionQuartzJob(id) {
return request({ return request({
url: 'api/jobs/exec/' + id, url: 'api/jobs/executionQuartzJob/' + id,
method: 'put' method: 'post'
}) })
} }
export default { del, updateIsPause, execution, add, edit } export default { add, edit, del, switchJobPauseStatus, executionQuartzJob }
+12 -5
View File
@@ -1,15 +1,22 @@
import request from '@/utils/request' import request from '@/utils/request'
export function sendCaptcha(data) { export function sendResetEmailCaptcha(data) {
return request({ return request({
url: 'api/code/sendCaptcha?email=' + data, url: 'api/code/sendResetEmailCaptcha?email=' + data,
method: 'post' method: 'post'
}) })
} }
export function updatePass(pass) { export function sendResetPasswordCaptcha(data) {
return request({ return request({
url: 'api/users/updatePass/' + pass, url: 'api/code/sendResetPasswordCaptcha?email=' + data,
method: 'get' method: 'post'
})
}
export function validatedCaptcha(email, code, codeBi) {
return request({
url: `api/code/validatedCaptcha?email=${email}&code=${code}&codeBi=${codeBi}`,
method: 'post'
}) })
} }
+6 -6
View File
@@ -12,7 +12,7 @@ export function getDeptSuperior(ids, exclude) {
exclude = exclude !== undefined ? exclude : false exclude = exclude !== undefined ? exclude : false
const data = Array.isArray(ids) ? ids : [ids] const data = Array.isArray(ids) ? ids : [ids]
return request({ return request({
url: 'api/dept/superior?exclude=' + exclude, url: 'api/dept/getDeptSuperior?exclude=' + exclude,
method: 'post', method: 'post',
data data
}) })
@@ -20,7 +20,7 @@ export function getDeptSuperior(ids, exclude) {
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/dept', url: 'api/dept/createDept',
method: 'post', method: 'post',
data data
}) })
@@ -28,16 +28,16 @@ export function add(data) {
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/dept', url: 'api/dept/deleteDept',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/dept', url: 'api/dept/updateDept',
method: 'put', method: 'post',
data data
}) })
} }
+7 -7
View File
@@ -2,14 +2,14 @@ import request from '@/utils/request'
export function getDicts() { export function getDicts() {
return request({ return request({
url: 'api/dict/all', url: 'api/dict/queryAllDict',
method: 'get' method: 'post'
}) })
} }
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/dict', url: 'api/dict/createDict',
method: 'post', method: 'post',
data data
}) })
@@ -17,16 +17,16 @@ export function add(data) {
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/dict/', url: 'api/dict/deleteDict',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/dict', url: 'api/dict/updateDict',
method: 'put', method: 'post',
data data
}) })
} }
+1 -1
View File
@@ -20,7 +20,7 @@ export function getDictMap(dictName) {
size: 9999 size: 9999
} }
return request({ return request({
url: 'api/dictDetail/map', url: 'api/dictDetail/getDictDetailMaps',
method: 'get', method: 'get',
params params
}) })
+5 -5
View File
@@ -15,7 +15,7 @@ export function getAllJob() {
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/job', url: 'api/job/createJob',
method: 'post', method: 'post',
data data
}) })
@@ -23,16 +23,16 @@ export function add(data) {
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/job', url: 'api/job/deleteJob',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/job', url: 'api/job/updateJob',
method: 'put', method: 'post',
data data
}) })
} }
+12 -12
View File
@@ -2,8 +2,8 @@ import request from '@/utils/request'
export function getMenusTree(pid) { export function getMenusTree(pid) {
return request({ return request({
url: 'api/menus/lazy?pid=' + pid, url: 'api/menus/queryAllMenu?pid=' + pid,
method: 'get' method: 'post'
}) })
} }
@@ -18,7 +18,7 @@ export function getMenus(params) {
export function getMenuSuperior(ids) { export function getMenuSuperior(ids) {
const data = Array.isArray(ids) ? ids : [ids] const data = Array.isArray(ids) ? ids : [ids]
return request({ return request({
url: 'api/menus/superior', url: 'api/menus/queryMenuSuperior',
method: 'post', method: 'post',
data data
}) })
@@ -26,21 +26,21 @@ export function getMenuSuperior(ids) {
export function getChild(id) { export function getChild(id) {
return request({ return request({
url: 'api/menus/child?id=' + id, url: 'api/menus/queryChildMenu?id=' + id,
method: 'get' method: 'post'
}) })
} }
export function buildMenus() { export function buildMenus() {
return request({ return request({
url: 'api/menus/build', url: 'api/menus/buildMenus',
method: 'get' method: 'post'
}) })
} }
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/menus', url: 'api/menus/createMenu',
method: 'post', method: 'post',
data data
}) })
@@ -48,16 +48,16 @@ export function add(data) {
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/menus', url: 'api/menus/deleteMenu',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/menus', url: 'api/menus/updateMenu',
method: 'put', method: 'post',
data data
}) })
} }
+13 -13
View File
@@ -3,14 +3,14 @@ import request from '@/utils/request'
// 获取所有的Role // 获取所有的Role
export function getAll() { export function getAll() {
return request({ return request({
url: 'api/roles/all', url: 'api/roles/queryAllRole',
method: 'get' method: 'post'
}) })
} }
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/roles', url: 'api/roles/createRole',
method: 'post', method: 'post',
data data
}) })
@@ -18,38 +18,38 @@ export function add(data) {
export function get(id) { export function get(id) {
return request({ return request({
url: 'api/roles/' + id, url: 'api/roles/getRoleById/' + id,
method: 'get' method: 'post'
}) })
} }
export function getLevel() { export function getLevel() {
return request({ return request({
url: 'api/roles/level', url: 'api/roles/getRoleLevel',
method: 'get' method: 'post'
}) })
} }
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/roles', url: 'api/roles/deleteRole',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/roles', url: 'api/roles/updateRole',
method: 'put', method: 'post',
data data
}) })
} }
export function editMenu(data) { export function editMenu(data) {
return request({ return request({
url: 'api/roles/menu', url: 'api/roles/updateRoleMenu',
method: 'put', method: 'post',
data data
}) })
} }
+9 -9
View File
@@ -3,7 +3,7 @@ import { encrypt } from '@/utils/rsaEncrypt'
export function add(data) { export function add(data) {
return request({ return request({
url: 'api/users', url: 'api/users/createUser',
method: 'post', method: 'post',
data data
}) })
@@ -11,8 +11,8 @@ export function add(data) {
export function del(ids) { export function del(ids) {
return request({ return request({
url: 'api/users', url: 'api/users/deleteUser',
method: 'delete', method: 'post',
data: ids data: ids
}) })
} }
@@ -20,23 +20,23 @@ export function del(ids) {
export function resetPwd(ids) { export function resetPwd(ids) {
return request({ return request({
url: 'api/users/resetPwd', url: 'api/users/resetPwd',
method: 'put', method: 'post',
data: ids data: ids
}) })
} }
export function edit(data) { export function edit(data) {
return request({ return request({
url: 'api/users', url: 'api/users/updateUser',
method: 'put', method: 'post',
data data
}) })
} }
export function editUser(data) { export function editUser(data) {
return request({ return request({
url: 'api/users/center', url: 'api/users/updateCenterInfo',
method: 'put', method: 'post',
data data
}) })
} }
@@ -47,7 +47,7 @@ export function updatePass(user) {
newPass: encrypt(user.newPass) newPass: encrypt(user.newPass)
} }
return request({ return request({
url: 'api/users/updatePass/', url: 'api/users/updatePassword/',
method: 'post', method: 'post',
data data
}) })
+18 -18
View File
@@ -1,24 +1,24 @@
import request from '@/utils/request' import request from '@/utils/request'
export function get() { export function queryEmailConfig() {
return request({ return request({
url: 'api/email', url: 'api/email/queryEmailConfig',
method: 'get'
})
}
export function update(data) {
return request({
url: 'api/email',
data,
method: 'put'
})
}
export function send(data) {
return request({
url: 'api/email',
data,
method: 'post' method: 'post'
}) })
} }
export function updateEmailConfig(data) {
return request({
url: 'api/email/updateEmailConfig',
method: 'post',
data
})
}
export function sendEmail(data) {
return request({
url: 'api/email/sendEmail',
method: 'post',
data
})
}
+6 -6
View File
@@ -1,17 +1,17 @@
import request from '@/utils/request' import request from '@/utils/request'
export function get() { export function queryQiNiuConfig() {
return request({ return request({
url: 'api/qiNiuContent/config', url: 'api/qiNiuContent/queryQiNiuConfig',
method: 'get' method: 'post'
}) })
} }
export function update(data) { export function update(data) {
return request({ return request({
url: 'api/qiNiuContent/config', url: 'api/qiNiuContent/updateQiNiuConfig',
data, method: 'post',
method: 'put' data
}) })
} }
@@ -55,7 +55,7 @@
</template> </template>
<script> <script>
import { del } from '@/api/monitor/online' import { kickOutUser } from '@/api/monitor/online'
import CRUD, { presenter, header, crud } from '@crud/crud' import CRUD, { presenter, header, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
@@ -102,7 +102,7 @@ export default {
}) })
} else ids.push(key) } else ids.push(key)
this.delLoading = true this.delLoading = true
del(ids).then(() => { kickOutUser(ids).then(() => {
this.delLoading = false this.delLoading = false
if (this.$refs[index]) { if (this.$refs[index]) {
this.$refs[index].doClose() this.$refs[index].doClose()
@@ -114,7 +114,7 @@
</template> </template>
<script> <script>
import crudJob from '@/api/system/timing' import crudJob from '@/api/quartzjob/timing'
import Log from './log' import Log from './log'
import CRUD, { presenter, header, form, crud } from '@crud/crud' import CRUD, { presenter, header, form, crud } from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
@@ -163,7 +163,7 @@ export default {
methods: { methods: {
// 执行 // 执行
execute(id) { execute(id) {
crudJob.execution(id).then(res => { crudJob.executionQuartzJob(id).then(res => {
this.crud.notify('执行成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify('执行成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(err => { }).catch(err => {
console.log(err.response.data.message) console.log(err.response.data.message)
@@ -174,7 +174,7 @@ export default {
if (status === '恢复') { if (status === '恢复') {
this.updateParams(id) this.updateParams(id)
} }
crudJob.updateIsPause(id).then(res => { crudJob.switchJobPauseStatus(id).then(res => {
this.crud.toQuery() this.crud.toQuery()
this.crud.notify(status + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS) this.crud.notify(status + '成功', CRUD.NOTIFICATION_TYPE.SUCCESS)
}).catch(err => { }).catch(err => {
@@ -25,7 +25,7 @@
import store from '@/store' import store from '@/store'
import { validEmail } from '@/utils/validate' import { validEmail } from '@/utils/validate'
import { updateEmail } from '@/api/system/user' import { updateEmail } from '@/api/system/user'
import { sendCaptcha } from '@/api/system/code' import { sendResetEmailCaptcha } from '@/api/system/code'
export default { export default {
props: { props: {
email: { email: {
@@ -71,7 +71,7 @@ export default {
this.codeLoading = true this.codeLoading = true
this.buttonName = '验证码发送中' this.buttonName = '验证码发送中'
const _this = this const _this = this
sendCaptcha(this.form.email).then(res => { sendResetEmailCaptcha(this.form.email).then(res => {
this.$message({ this.$message({
showClose: true, showClose: true,
message: '发送成功,验证码有效期5分钟', message: '发送成功,验证码有效期5分钟',
+3 -3
View File
@@ -27,7 +27,7 @@
</template> </template>
<script> <script>
import { get, update } from '@/api/tools/email' import { queryEmailConfig, updateEmailConfig } from '@/api/tools/email'
export default { export default {
name: 'Config', name: 'Config',
data() { data() {
@@ -58,7 +58,7 @@ export default {
}, },
methods: { methods: {
init() { init() {
get().then(res => { queryEmailConfig().then(res => {
this.form = res this.form = res
}) })
}, },
@@ -66,7 +66,7 @@ export default {
this.$refs['form'].validate((valid) => { this.$refs['form'].validate((valid) => {
if (valid) { if (valid) {
this.loading = true this.loading = true
update(this.form).then(res => { updateEmailConfig(this.form).then(res => {
this.$notify({ this.$notify({
title: '修改成功', title: '修改成功',
type: 'success', type: 'success',
+2 -2
View File
@@ -14,7 +14,7 @@
</template> </template>
<script> <script>
import { send } from '@/api/tools/email' import { sendEmail } from '@/api/tools/email'
import { upload } from '@/utils/upload' import { upload } from '@/utils/upload'
import { mapGetters } from 'vuex' import { mapGetters } from 'vuex'
import E from 'wangeditor' import E from 'wangeditor'
@@ -66,7 +66,7 @@ export default {
this.$refs['form'].validate((valid) => { this.$refs['form'].validate((valid) => {
if (valid) { if (valid) {
this.loading = true this.loading = true
send(this.form).then(res => { sendEmail(this.form).then(res => {
this.$notify({ this.$notify({
title: '发送成功', title: '发送成功',
type: 'success', type: 'success',
@@ -36,7 +36,7 @@
</template> </template>
<script> <script>
import { get, update } from '@/api/tools/qiniu' import { queryQiNiuConfig, update } from '@/api/tools/qiniu'
export default { export default {
data() { data() {
return { return {
@@ -63,7 +63,7 @@ export default {
}, },
methods: { methods: {
init() { init() {
get().then(res => { queryQiNiuConfig().then(res => {
this.form = res this.form = res
}) })
}, },
@@ -0,0 +1,184 @@
package cn.odboy.util;
import java.util.concurrent.atomic.AtomicLong;
/**
* 分布式id生成工具
*
* @author odboy
* @date 2025-04-05
*/
public final class DistributedIdUtil {
/**
* 起始毫秒时间戳,2020-12-30
*/
private static final long START_TIMESTAMP = 1609314517000L;
/**
* 数据中心 ID 所占位数
*/
private final long dataCenterIdBits;
/**
* 机器 ID 所占位数
*/
private final long workerIdBits;
/**
* 序列号所占位数
*/
private final long sequenceBits;
/**
* 数据中心 ID 最大值
*/
private final long maxDataCenterId;
/**
* 机器 ID 最大值
*/
private final long maxWorkerId;
/**
* 序列号最大值
*/
private final long sequenceMask;
/**
* 机器 ID 向左移位数
*/
private final long workerIdShift;
/**
* 数据中心 ID 向左移位数
*/
private final long dataCenterIdShift;
/**
* 时间戳向左移位数
*/
private final long timestampLeftShift;
/**
* 数据中心 ID
*/
private final long dataCenterId;
/**
* 机器 ID
*/
private final long workerId;
/**
* 序列号
*/
private final AtomicLong sequence = new AtomicLong(0L);
/**
* 上一次生成 ID 的时间戳
*/
private final AtomicLong lastTimestamp = new AtomicLong(-1L);
/**
* 单例实例持有者类
*/
private static class InstanceHolder {
private static final DistributedIdUtil INSTANCE = new DistributedIdUtil(20, 12, 5, 5, 12);
}
/**
* 构造函数,初始化数据中心 ID 和机器 ID
*
* @param dataCenterId 数据中心 ID
* @param workerId 机器 ID
* @param dataCenterIdBits 数据中心 ID 所占位数
* @param workerIdBits 机器 ID 所占位数
* @param sequenceBits 序列号所占位数
*/
public DistributedIdUtil(long dataCenterId, long workerId, long dataCenterIdBits, long workerIdBits, long sequenceBits) {
this.dataCenterIdBits = dataCenterIdBits;
this.workerIdBits = workerIdBits;
this.sequenceBits = sequenceBits;
this.maxDataCenterId = ~(-1L << dataCenterIdBits);
this.maxWorkerId = ~(-1L << workerIdBits);
this.sequenceMask = ~(-1L << sequenceBits);
this.workerIdShift = sequenceBits;
this.dataCenterIdShift = sequenceBits + workerIdBits;
this.timestampLeftShift = sequenceBits + workerIdBits + dataCenterIdBits;
if (dataCenterId > maxDataCenterId || dataCenterId < 0) {
throw new IllegalArgumentException("Data center ID can't be greater than " + maxDataCenterId + " or less than 0");
}
if (workerId > maxWorkerId || workerId < 0) {
throw new IllegalArgumentException("Worker ID can't be greater than " + maxWorkerId + " or less than 0");
}
this.dataCenterId = dataCenterId;
this.workerId = workerId;
}
/**
* 生成下一个分布式 ID
*
* @return 生成的分布式 ID
*/
public long nextId() {
long currentTimestamp = System.currentTimeMillis();
// 如果当前时间戳小于上一次生成 ID 的时间戳,说明时钟回拨,抛出异常
if (currentTimestamp < lastTimestamp.get()) {
throw new RuntimeException("Clock moved backwards. Refusing to generate id for " + (lastTimestamp.get() - currentTimestamp) + " milliseconds");
}
long lastTimestampValue = lastTimestamp.get();
if (currentTimestamp == lastTimestampValue) {
// 同一毫秒内,序列号自增
long seq = sequence.incrementAndGet() & sequenceMask;
if (seq == 0) {
// 序列号溢出,等待下一毫秒
currentTimestamp = waitNextMillis(lastTimestampValue);
}
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) |
(dataCenterId << dataCenterIdShift) |
(workerId << workerIdShift) |
seq;
} else {
// 时间戳改变,重置序列号
sequence.set(0L);
lastTimestamp.set(currentTimestamp);
return ((currentTimestamp - START_TIMESTAMP) << timestampLeftShift) |
(dataCenterId << dataCenterIdShift) |
(workerId << workerIdShift);
}
}
/**
* 等待下一毫秒
*
* @param lastTimestamp 上一次生成 ID 的时间戳
* @return 当前时间戳
*/
private long waitNextMillis(long lastTimestamp) {
long timestamp = System.currentTimeMillis();
while (timestamp <= lastTimestamp) {
timestamp = System.currentTimeMillis();
}
return timestamp;
}
/**
* 获取单例实例的下一个分布式 ID
*
* @return 生成的分布式 ID
*/
public static long fastNextId() {
return InstanceHolder.INSTANCE.nextId();
}
/**
* 主方法,用于测试分布式 ID 生成
*
* @param args 命令行参数
*/
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
new Thread(() -> {
long id = Thread.currentThread().getId();
for (int j = 0; j < 20; j++) {
System.out.println(id + " - " + DistributedIdUtil.fastNextId());
}
}).start();
}
}
}
@@ -36,7 +36,6 @@ import java.util.Set;
@RequestMapping("/api/jobs") @RequestMapping("/api/jobs")
@Api(tags = "系统:定时任务管理") @Api(tags = "系统:定时任务管理")
public class QuartzJobController { public class QuartzJobController {
private static final String ENTITY_NAME = "quartzJob"; private static final String ENTITY_NAME = "quartzJob";
private final QuartzJobService quartzJobService; private final QuartzJobService quartzJobService;
@@ -94,15 +93,15 @@ public class QuartzJobController {
} }
@ApiOperation("更改定时任务状态") @ApiOperation("更改定时任务状态")
@PutMapping(value = "/{id}") @PostMapping(value = "/switchJobPauseStatus/{id}")
@PreAuthorize("@el.check('timing:edit')") @PreAuthorize("@el.check('timing:edit')")
public ResponseEntity<Object> updateQuartzJobStatus(@PathVariable Long id) { public ResponseEntity<Object> switchJobPauseStatus(@PathVariable Long id) {
quartzJobService.switchJobPauseStatus(quartzJobService.getById(id)); quartzJobService.switchJobPauseStatus(quartzJobService.getById(id));
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@ApiOperation("执行定时任务") @ApiOperation("执行定时任务")
@PutMapping(value = "/exec/{id}") @PostMapping(value = "/executionQuartzJob/{id}")
@PreAuthorize("@el.check('timing:edit')") @PreAuthorize("@el.check('timing:edit')")
public ResponseEntity<Object> executionQuartzJob(@PathVariable Long id) { public ResponseEntity<Object> executionQuartzJob(@PathVariable Long id) {
quartzJobService.executionJob(quartzJobService.getById(id)); quartzJobService.executionJob(quartzJobService.getById(id));
@@ -1,6 +1,5 @@
package cn.odboy.application.core.context; package cn.odboy.application.core.context;
import cn.odboy.application.core.config.SecurityProperties;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl; import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.security.config.annotation.SecurityConfigurerAdapter; import org.springframework.security.config.annotation.SecurityConfigurerAdapter;
@@ -10,14 +9,12 @@ import org.springframework.security.web.authentication.UsernamePasswordAuthentic
@RequiredArgsConstructor @RequiredArgsConstructor
public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> { public class TokenConfigurer extends SecurityConfigurerAdapter<DefaultSecurityFilterChain, HttpSecurity> {
private final TokenProvider tokenProvider; private final TokenProvider tokenProvider;
private final SecurityProperties properties;
private final UserOnlineServiceImpl onlineUserService; private final UserOnlineServiceImpl onlineUserService;
@Override @Override
public void configure(HttpSecurity http) { public void configure(HttpSecurity http) {
TokenFilter customFilter = new TokenFilter(tokenProvider, properties, onlineUserService); TokenFilter customFilter = new TokenFilter(tokenProvider, onlineUserService);
http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class); http.addFilterBefore(customFilter, UsernamePasswordAuthenticationFilter.class);
} }
} }
@@ -1,7 +1,6 @@
package cn.odboy.application.core.context; package cn.odboy.application.core.context;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.odboy.application.core.config.SecurityProperties;
import cn.odboy.application.core.service.impl.UserOnlineServiceImpl; import cn.odboy.application.core.service.impl.UserOnlineServiceImpl;
import cn.odboy.constant.SystemConst; import cn.odboy.constant.SystemConst;
import cn.odboy.model.system.model.UserOnlineModel; import cn.odboy.model.system.model.UserOnlineModel;
@@ -19,18 +18,14 @@ import java.io.IOException;
@Slf4j @Slf4j
public class TokenFilter extends GenericFilterBean { public class TokenFilter extends GenericFilterBean {
private final TokenProvider tokenProvider; private final TokenProvider tokenProvider;
private final SecurityProperties properties;
private final UserOnlineServiceImpl onlineUserService; private final UserOnlineServiceImpl onlineUserService;
/** /**
* @param tokenProvider Token * @param tokenProvider Token
* @param properties JWT
* @param onlineUserService 用户在线 * @param onlineUserService 用户在线
*/ */
public TokenFilter(TokenProvider tokenProvider, SecurityProperties properties, UserOnlineServiceImpl onlineUserService) { public TokenFilter(TokenProvider tokenProvider, UserOnlineServiceImpl onlineUserService) {
this.properties = properties;
this.onlineUserService = onlineUserService; this.onlineUserService = onlineUserService;
this.tokenProvider = tokenProvider; this.tokenProvider = tokenProvider;
} }
@@ -2,8 +2,6 @@ package cn.odboy.application.core.rest;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.IdUtil;
import cn.odboy.annotation.AnonymousDeleteMapping;
import cn.odboy.annotation.AnonymousGetMapping;
import cn.odboy.annotation.AnonymousPostMapping; import cn.odboy.annotation.AnonymousPostMapping;
import cn.odboy.application.core.config.CaptchaProperties; import cn.odboy.application.core.config.CaptchaProperties;
import cn.odboy.application.core.config.LoginProperties; import cn.odboy.application.core.config.LoginProperties;
@@ -34,7 +32,7 @@ import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -101,7 +99,7 @@ public class AuthController {
} }
@ApiOperation("获取用户信息") @ApiOperation("获取用户信息")
@GetMapping(value = "/info") @PostMapping(value = "/info")
public ResponseEntity<UserInfoResponse> getUserInfo() { public ResponseEntity<UserInfoResponse> getUserInfo() {
UserJwtModel jwtUser = (UserJwtModel) SecurityHelper.getCurrentUser(); UserJwtModel jwtUser = (UserJwtModel) SecurityHelper.getCurrentUser();
UserInfoResponse userInfoResponse = BeanUtil.copyProperties(jwtUser, UserInfoResponse.class); UserInfoResponse userInfoResponse = BeanUtil.copyProperties(jwtUser, UserInfoResponse.class);
@@ -109,7 +107,7 @@ public class AuthController {
} }
@ApiOperation("获取验证码") @ApiOperation("获取验证码")
@AnonymousGetMapping(value = "/code") @AnonymousPostMapping(value = "/code")
public ResponseEntity<Object> getCode() { public ResponseEntity<Object> getCode() {
// 获取运算的结果 // 获取运算的结果
Captcha captcha = captchaProperties.getCaptcha(); Captcha captcha = captchaProperties.getCaptcha();
@@ -130,7 +128,7 @@ public class AuthController {
} }
@ApiOperation("退出登录") @ApiOperation("退出登录")
@AnonymousDeleteMapping(value = "/logout") @AnonymousPostMapping(value = "/logout")
public ResponseEntity<Object> logout(HttpServletRequest request) { public ResponseEntity<Object> logout(HttpServletRequest request) {
String token = tokenProvider.getToken(request); String token = tokenProvider.getToken(request);
onlineUserService.logoutByToken(token); onlineUserService.logoutByToken(token);
@@ -11,8 +11,8 @@ import org.springframework.data.domain.Pageable;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -43,9 +43,9 @@ public class OnlineController {
} }
@ApiOperation("踢出用户") @ApiOperation("踢出用户")
@DeleteMapping @PostMapping(value = "/kickOutUser")
@PreAuthorize("@el.check()") @PreAuthorize("@el.check()")
public ResponseEntity<Object> deleteOnlineUser(@RequestBody Set<String> keys) throws Exception { public ResponseEntity<Object> kickOutUser(@RequestBody Set<String> keys) throws Exception {
for (String token : keys) { for (String token : keys) {
// 解密Key // 解密Key
token = DesEncryptUtil.desDecrypt(token); token = DesEncryptUtil.desDecrypt(token);
@@ -14,8 +14,8 @@ public interface UserOnlineService {
* 保存在线用户信息 * 保存在线用户信息
* *
* @param userJwtModel / * @param userJwtModel /
* @param token / * @param token /
* @param request / * @param request /
*/ */
void save(UserJwtModel userJwtModel, String token, HttpServletRequest request); void save(UserJwtModel userJwtModel, String token, HttpServletRequest request);
@@ -6,8 +6,8 @@ import cn.odboy.application.system.service.RoleService;
import cn.odboy.application.system.service.UserService; import cn.odboy.application.system.service.UserService;
import cn.odboy.exception.BadRequestException; import cn.odboy.exception.BadRequestException;
import cn.odboy.model.system.domain.User; import cn.odboy.model.system.domain.User;
import cn.odboy.model.system.model.UserJwtModel;
import cn.odboy.model.system.model.RoleCodeModel; import cn.odboy.model.system.model.RoleCodeModel;
import cn.odboy.model.system.model.UserJwtModel;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UserDetailsService;
@@ -9,7 +9,6 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -29,23 +28,23 @@ public class CaptchaController {
* *
* @param email 邮件地址 * @param email 邮件地址
*/ */
@PostMapping(value = "/sendCaptcha")
@ApiOperation("重置邮箱,发送验证码") @ApiOperation("重置邮箱,发送验证码")
public ResponseEntity<Object> resetEmail(@RequestParam String email) { @PostMapping(value = "/sendResetEmailCaptcha")
public ResponseEntity<Object> sendResetEmailCaptcha(@RequestParam String email) {
emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey()); emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_EMAIL_CODE.getKey());
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@PostMapping(value = "/resetPass")
@ApiOperation("重置密码,发送验证码") @ApiOperation("重置密码,发送验证码")
public ResponseEntity<Object> resetPass(@RequestParam String email) { @PostMapping(value = "/sendResetPasswordCaptcha")
public ResponseEntity<Object> sendResetPasswordCaptcha(@RequestParam String email) {
emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_PWD_CODE.getKey()); emailService.sendCaptcha(email, CodeEnum.EMAIL_RESET_PWD_CODE.getKey());
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@GetMapping(value = "/validated")
@ApiOperation("验证码验证") @ApiOperation("验证码验证")
public ResponseEntity<Object> validated(@RequestParam String email, @RequestParam String code, @RequestParam Integer codeBi) { @PostMapping(value = "/validatedCaptcha")
public ResponseEntity<Object> validatedCaptcha(@RequestParam String email, @RequestParam String code, @RequestParam Integer codeBi) {
CodeBiEnum biEnum = CodeBiEnum.find(codeBi); CodeBiEnum biEnum = CodeBiEnum.find(codeBi);
switch (Objects.requireNonNull(biEnum)) { switch (Objects.requireNonNull(biEnum)) {
case ONE: case ONE:
@@ -13,10 +13,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -52,7 +50,7 @@ public class DeptController {
} }
@ApiOperation("查询部门:根据ID获取同级与上级数据") @ApiOperation("查询部门:根据ID获取同级与上级数据")
@PostMapping("/superior") @PostMapping("/getDeptSuperior")
@PreAuthorize("@el.check('user:list','dept:list')") @PreAuthorize("@el.check('user:list','dept:list')")
public ResponseEntity<Object> getDeptSuperior(@RequestBody List<Long> ids, @RequestParam(defaultValue = "false") Boolean exclude) { public ResponseEntity<Object> getDeptSuperior(@RequestBody List<Long> ids, @RequestParam(defaultValue = "false") Boolean exclude) {
Set<Dept> deptSet = new LinkedHashSet<>(); Set<Dept> deptSet = new LinkedHashSet<>();
@@ -74,7 +72,7 @@ public class DeptController {
} }
@ApiOperation("新增部门") @ApiOperation("新增部门")
@PostMapping @PostMapping(value = "/createDept")
@PreAuthorize("@el.check('dept:add')") @PreAuthorize("@el.check('dept:add')")
public ResponseEntity<Object> createDept(@Validated @RequestBody CreateDeptRequest resources) { public ResponseEntity<Object> createDept(@Validated @RequestBody CreateDeptRequest resources) {
deptService.createDept(resources); deptService.createDept(resources);
@@ -82,7 +80,7 @@ public class DeptController {
} }
@ApiOperation("修改部门") @ApiOperation("修改部门")
@PutMapping @PostMapping(value = "/updateDept")
@PreAuthorize("@el.check('dept:edit')") @PreAuthorize("@el.check('dept:edit')")
public ResponseEntity<Object> updateDept(@Validated(Dept.Update.class) @RequestBody Dept resources) { public ResponseEntity<Object> updateDept(@Validated(Dept.Update.class) @RequestBody Dept resources) {
deptService.updateDept(resources); deptService.updateDept(resources);
@@ -90,7 +88,7 @@ public class DeptController {
} }
@ApiOperation("删除部门") @ApiOperation("删除部门")
@DeleteMapping @PostMapping(value = "/deleteDept")
@PreAuthorize("@el.check('dept:del')") @PreAuthorize("@el.check('dept:del')")
public ResponseEntity<Object> deleteDept(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteDept(@RequestBody Set<Long> ids) {
Set<Dept> depts = new HashSet<>(); Set<Dept> depts = new HashSet<>();
@@ -13,10 +13,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -40,7 +38,7 @@ public class DictController {
} }
@ApiOperation("查询字典") @ApiOperation("查询字典")
@GetMapping(value = "/all") @PostMapping(value = "/queryAllDict")
@PreAuthorize("@el.check('dict:list')") @PreAuthorize("@el.check('dict:list')")
public ResponseEntity<List<Dict>> queryAllDict() { public ResponseEntity<List<Dict>> queryAllDict() {
return new ResponseEntity<>(dictService.selectDictByCriteria(new QueryDictRequest()), HttpStatus.OK); return new ResponseEntity<>(dictService.selectDictByCriteria(new QueryDictRequest()), HttpStatus.OK);
@@ -55,7 +53,7 @@ public class DictController {
} }
@ApiOperation("新增字典") @ApiOperation("新增字典")
@PostMapping @PostMapping(value = "/createDict")
@PreAuthorize("@el.check('dict:add')") @PreAuthorize("@el.check('dict:add')")
public ResponseEntity<Object> createDict(@Validated @RequestBody CreateDictRequest resources) { public ResponseEntity<Object> createDict(@Validated @RequestBody CreateDictRequest resources) {
dictService.saveDict(resources); dictService.saveDict(resources);
@@ -63,7 +61,7 @@ public class DictController {
} }
@ApiOperation("修改字典") @ApiOperation("修改字典")
@PutMapping @PostMapping(value = "/updateDict")
@PreAuthorize("@el.check('dict:edit')") @PreAuthorize("@el.check('dict:edit')")
public ResponseEntity<Object> updateDict(@Validated(Dict.Update.class) @RequestBody Dict resources) { public ResponseEntity<Object> updateDict(@Validated(Dict.Update.class) @RequestBody Dict resources) {
dictService.updateDictById(resources); dictService.updateDictById(resources);
@@ -71,7 +69,7 @@ public class DictController {
} }
@ApiOperation("删除字典") @ApiOperation("删除字典")
@DeleteMapping @PostMapping(value = "/deleteDict")
@PreAuthorize("@el.check('dict:del')") @PreAuthorize("@el.check('dict:del')")
public ResponseEntity<Object> deleteDict(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteDict(@RequestBody Set<Long> ids) {
dictService.deleteDictByIds(ids); dictService.deleteDictByIds(ids);
@@ -41,7 +41,7 @@ public class DictDetailController {
} }
@ApiOperation("查询多个字典详情") @ApiOperation("查询多个字典详情")
@GetMapping(value = "/map") @GetMapping(value = "/getDictDetailMaps")
public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName) { public ResponseEntity<Object> getDictDetailMaps(@RequestParam String dictName) {
String[] names = dictName.split("[,,]"); String[] names = dictName.split("[,,]");
Map<String, List<DictDetail>> dictMap = new HashMap<>(16); Map<String, List<DictDetail>> dictMap = new HashMap<>(16);
@@ -13,10 +13,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -48,7 +46,7 @@ public class JobController {
} }
@ApiOperation("新增岗位") @ApiOperation("新增岗位")
@PostMapping @PostMapping(value = "/createJob")
@PreAuthorize("@el.check('job:add')") @PreAuthorize("@el.check('job:add')")
public ResponseEntity<Object> createJob(@Validated @RequestBody CreateJobRequest resources) { public ResponseEntity<Object> createJob(@Validated @RequestBody CreateJobRequest resources) {
jobService.createJob(resources); jobService.createJob(resources);
@@ -56,7 +54,7 @@ public class JobController {
} }
@ApiOperation("修改岗位") @ApiOperation("修改岗位")
@PutMapping @PostMapping(value = "/updateJob")
@PreAuthorize("@el.check('job:edit')") @PreAuthorize("@el.check('job:edit')")
public ResponseEntity<Object> updateJob(@Validated(Job.Update.class) @RequestBody Job resources) { public ResponseEntity<Object> updateJob(@Validated(Job.Update.class) @RequestBody Job resources) {
jobService.updateJobById(resources); jobService.updateJobById(resources);
@@ -64,7 +62,7 @@ public class JobController {
} }
@ApiOperation("删除岗位") @ApiOperation("删除岗位")
@DeleteMapping @PostMapping(value = "/deleteJob")
@PreAuthorize("@el.check('job:del')") @PreAuthorize("@el.check('job:del')")
public ResponseEntity<Object> deleteJob(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteJob(@RequestBody Set<Long> ids) {
// 验证是否被用户关联 // 验证是否被用户关联
@@ -16,10 +16,8 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -49,7 +47,7 @@ public class MenuController {
menuService.downloadExcel(menuService.selectMenuByCriteria(criteria, false), response); menuService.downloadExcel(menuService.selectMenuByCriteria(criteria, false), response);
} }
@GetMapping(value = "/build") @PostMapping(value = "/buildMenus")
@ApiOperation("获取前端所需菜单") @ApiOperation("获取前端所需菜单")
public ResponseEntity<List<MenuResponse>> buildMenus() { public ResponseEntity<List<MenuResponse>> buildMenus() {
List<Menu> menuList = menuService.selectMenuByUserId(SecurityHelper.getCurrentUserId()); List<Menu> menuList = menuService.selectMenuByUserId(SecurityHelper.getCurrentUserId());
@@ -58,16 +56,16 @@ public class MenuController {
} }
@ApiOperation("返回全部的菜单") @ApiOperation("返回全部的菜单")
@GetMapping(value = "/lazy") @PostMapping(value = "/queryAllMenu")
@PreAuthorize("@el.check('menu:list','roles:list')") @PreAuthorize("@el.check('menu:list','roles:list')")
public ResponseEntity<List<Menu>> queryAllMenu(@RequestParam Long pid) { public ResponseEntity<List<Menu>> queryAllMenu(@RequestParam Long pid) {
return new ResponseEntity<>(menuService.selectMenuByPid(pid), HttpStatus.OK); return new ResponseEntity<>(menuService.selectMenuByPid(pid), HttpStatus.OK);
} }
@ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID") @ApiOperation("根据菜单ID返回所有子节点ID,包含自身ID")
@GetMapping(value = "/child") @PostMapping(value = "/queryChildMenu")
@PreAuthorize("@el.check('menu:list','roles:list')") @PreAuthorize("@el.check('menu:list','roles:list')")
public ResponseEntity<Object> childMenu(@RequestParam Long id) { public ResponseEntity<Object> queryChildMenu(@RequestParam Long id) {
Set<Menu> menuSet = new HashSet<>(); Set<Menu> menuSet = new HashSet<>();
List<Menu> menuList = menuService.selectMenuByPid(id); List<Menu> menuList = menuService.selectMenuByPid(id);
menuSet.add(menuService.getById(id)); menuSet.add(menuService.getById(id));
@@ -85,9 +83,9 @@ public class MenuController {
} }
@ApiOperation("查询菜单:根据ID获取同级与上级数据") @ApiOperation("查询菜单:根据ID获取同级与上级数据")
@PostMapping("/superior") @PostMapping("/queryMenuSuperior")
@PreAuthorize("@el.check('menu:list')") @PreAuthorize("@el.check('menu:list')")
public ResponseEntity<List<Menu>> getMenuSuperior(@RequestBody List<Long> ids) { public ResponseEntity<List<Menu>> queryMenuSuperior(@RequestBody List<Long> ids) {
Set<Menu> menus = new LinkedHashSet<>(); Set<Menu> menus = new LinkedHashSet<>();
if (CollectionUtil.isNotEmpty(ids)) { if (CollectionUtil.isNotEmpty(ids)) {
for (Long id : ids) { for (Long id : ids) {
@@ -108,7 +106,7 @@ public class MenuController {
} }
@ApiOperation("新增菜单") @ApiOperation("新增菜单")
@PostMapping @PostMapping(value = "/createMenu")
@PreAuthorize("@el.check('menu:add')") @PreAuthorize("@el.check('menu:add')")
public ResponseEntity<Object> createMenu(@Validated @RequestBody Menu resources) { public ResponseEntity<Object> createMenu(@Validated @RequestBody Menu resources) {
if (resources.getId() != null) { if (resources.getId() != null) {
@@ -119,7 +117,7 @@ public class MenuController {
} }
@ApiOperation("修改菜单") @ApiOperation("修改菜单")
@PutMapping @PostMapping(value = "/updateMenu")
@PreAuthorize("@el.check('menu:edit')") @PreAuthorize("@el.check('menu:edit')")
public ResponseEntity<Object> updateMenu(@Validated(Menu.Update.class) @RequestBody Menu resources) { public ResponseEntity<Object> updateMenu(@Validated(Menu.Update.class) @RequestBody Menu resources) {
menuService.updateMenuById(resources); menuService.updateMenuById(resources);
@@ -127,7 +125,7 @@ public class MenuController {
} }
@ApiOperation("删除菜单") @ApiOperation("删除菜单")
@DeleteMapping @PostMapping(value = "/deleteMenu")
@PreAuthorize("@el.check('menu:del')") @PreAuthorize("@el.check('menu:del')")
public ResponseEntity<Object> deleteMenu(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteMenu(@RequestBody Set<Long> ids) {
Set<Menu> menuSet = new HashSet<>(); Set<Menu> menuSet = new HashSet<>();
@@ -16,11 +16,9 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -40,9 +38,9 @@ public class RoleController {
private final RoleService roleService; private final RoleService roleService;
@ApiOperation("获取单个role") @ApiOperation("获取单个role")
@GetMapping(value = "/{id}") @PostMapping(value = "/getRoleById/{id}")
@PreAuthorize("@el.check('roles:list')") @PreAuthorize("@el.check('roles:list')")
public ResponseEntity<Role> findRoleById(@PathVariable Long id) { public ResponseEntity<Role> getRoleById(@PathVariable Long id) {
return new ResponseEntity<>(roleService.getRoleById(id), HttpStatus.OK); return new ResponseEntity<>(roleService.getRoleById(id), HttpStatus.OK);
} }
@@ -54,7 +52,7 @@ public class RoleController {
} }
@ApiOperation("返回全部的角色") @ApiOperation("返回全部的角色")
@GetMapping(value = "/all") @PostMapping(value = "/queryAllRole")
@PreAuthorize("@el.check('roles:list','user:add','user:edit')") @PreAuthorize("@el.check('roles:list','user:add','user:edit')")
public ResponseEntity<List<Role>> queryAllRole() { public ResponseEntity<List<Role>> queryAllRole() {
return new ResponseEntity<>(roleService.selectRole(), HttpStatus.OK); return new ResponseEntity<>(roleService.selectRole(), HttpStatus.OK);
@@ -69,13 +67,13 @@ public class RoleController {
} }
@ApiOperation("获取用户级别") @ApiOperation("获取用户级别")
@GetMapping(value = "/level") @PostMapping(value = "/getRoleLevel")
public ResponseEntity<Object> getRoleLevel() { public ResponseEntity<Object> getRoleLevel() {
return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK); return new ResponseEntity<>(Dict.create().set("level", getLevels(null)), HttpStatus.OK);
} }
@ApiOperation("新增角色") @ApiOperation("新增角色")
@PostMapping @PostMapping(value = "/createRole")
@PreAuthorize("@el.check('roles:add')") @PreAuthorize("@el.check('roles:add')")
public ResponseEntity<Object> createRole(@Validated @RequestBody CreateRoleRequest resources) { public ResponseEntity<Object> createRole(@Validated @RequestBody CreateRoleRequest resources) {
getLevels(resources.getLevel()); getLevels(resources.getLevel());
@@ -84,7 +82,7 @@ public class RoleController {
} }
@ApiOperation("修改角色") @ApiOperation("修改角色")
@PutMapping @PostMapping(value = "/updateRole")
@PreAuthorize("@el.check('roles:edit')") @PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Object> updateRole(@Validated(Role.Update.class) @RequestBody Role resources) { public ResponseEntity<Object> updateRole(@Validated(Role.Update.class) @RequestBody Role resources) {
getLevels(resources.getLevel()); getLevels(resources.getLevel());
@@ -93,7 +91,7 @@ public class RoleController {
} }
@ApiOperation("修改角色菜单") @ApiOperation("修改角色菜单")
@PutMapping(value = "/menu") @PostMapping(value = "/updateRoleMenu")
@PreAuthorize("@el.check('roles:edit')") @PreAuthorize("@el.check('roles:edit')")
public ResponseEntity<Object> updateRoleMenu(@RequestBody Role resources) { public ResponseEntity<Object> updateRoleMenu(@RequestBody Role resources) {
Role role = roleService.getById(resources.getId()); Role role = roleService.getById(resources.getId());
@@ -103,7 +101,7 @@ public class RoleController {
} }
@ApiOperation("删除角色") @ApiOperation("删除角色")
@DeleteMapping @PostMapping(value = "/deleteRole")
@PreAuthorize("@el.check('roles:del')") @PreAuthorize("@el.check('roles:del')")
public ResponseEntity<Object> deleteRole(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteRole(@RequestBody Set<Long> ids) {
for (Long id : ids) { for (Long id : ids) {
@@ -31,11 +31,9 @@ import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -99,7 +97,7 @@ public class UserController {
} }
@ApiOperation("新增用户") @ApiOperation("新增用户")
@PostMapping @PostMapping(value = "/createUser")
@PreAuthorize("@el.check('user:add')") @PreAuthorize("@el.check('user:add')")
public ResponseEntity<Object> createUser(@Validated @RequestBody User resources) { public ResponseEntity<Object> createUser(@Validated @RequestBody User resources) {
checkLevel(resources); checkLevel(resources);
@@ -110,7 +108,7 @@ public class UserController {
} }
@ApiOperation("修改用户") @ApiOperation("修改用户")
@PutMapping @PostMapping(value = "/updateUser")
@PreAuthorize("@el.check('user:edit')") @PreAuthorize("@el.check('user:edit')")
public ResponseEntity<Object> updateUser(@Validated(User.Update.class) @RequestBody User resources) throws Exception { public ResponseEntity<Object> updateUser(@Validated(User.Update.class) @RequestBody User resources) throws Exception {
checkLevel(resources); checkLevel(resources);
@@ -119,8 +117,8 @@ public class UserController {
} }
@ApiOperation("修改用户:个人中心") @ApiOperation("修改用户:个人中心")
@PutMapping(value = "center") @PostMapping(value = "updateCenterInfo")
public ResponseEntity<Object> centerUser(@Validated(User.Update.class) @RequestBody User resources) { public ResponseEntity<Object> updateCenterInfo(@Validated(User.Update.class) @RequestBody User resources) {
if (!resources.getId().equals(SecurityHelper.getCurrentUserId())) { if (!resources.getId().equals(SecurityHelper.getCurrentUserId())) {
throw new BadRequestException("不能修改他人资料"); throw new BadRequestException("不能修改他人资料");
} }
@@ -129,7 +127,7 @@ public class UserController {
} }
@ApiOperation("删除用户") @ApiOperation("删除用户")
@DeleteMapping @PostMapping(value = "/deleteUser")
@PreAuthorize("@el.check('user:del')") @PreAuthorize("@el.check('user:del')")
public ResponseEntity<Object> deleteUser(@RequestBody Set<Long> ids) { public ResponseEntity<Object> deleteUser(@RequestBody Set<Long> ids) {
for (Long id : ids) { for (Long id : ids) {
@@ -144,8 +142,8 @@ public class UserController {
} }
@ApiOperation("修改密码") @ApiOperation("修改密码")
@PostMapping(value = "/updatePass") @PostMapping(value = "/updatePassword")
public ResponseEntity<Object> updateUserPassword(@RequestBody UpdateUserPasswordResponse passVo) throws Exception { public ResponseEntity<Object> updatePassword(@RequestBody UpdateUserPasswordResponse passVo) throws Exception {
String oldPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getOldPass()); String oldPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getOldPass());
String newPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getNewPass()); String newPass = RsaEncryptUtil.decryptByPrivateKey(RsaProperties.privateKey, passVo.getNewPass());
User user = userService.getUserByUsername(SecurityHelper.getCurrentUsername()); User user = userService.getUserByUsername(SecurityHelper.getCurrentUsername());
@@ -160,7 +158,7 @@ public class UserController {
} }
@ApiOperation("重置密码") @ApiOperation("重置密码")
@PutMapping(value = "/resetPwd") @PostMapping(value = "/resetPwd")
public ResponseEntity<Object> resetPwd(@RequestBody Set<Long> ids) { public ResponseEntity<Object> resetPwd(@RequestBody Set<Long> ids) {
String defaultPwd = passwordEncoder.encode("123456"); String defaultPwd = passwordEncoder.encode("123456");
userService.resetPasswordByIds(ids, defaultPwd); userService.resetPasswordByIds(ids, defaultPwd);
@@ -15,8 +15,8 @@ import cn.odboy.exception.EntityExistException;
import cn.odboy.model.system.domain.Menu; import cn.odboy.model.system.domain.Menu;
import cn.odboy.model.system.domain.Role; import cn.odboy.model.system.domain.Role;
import cn.odboy.model.system.domain.User; import cn.odboy.model.system.domain.User;
import cn.odboy.model.system.request.QueryMenuRequest;
import cn.odboy.model.system.model.MenuMetaModel; import cn.odboy.model.system.model.MenuMetaModel;
import cn.odboy.model.system.request.QueryMenuRequest;
import cn.odboy.model.system.response.MenuResponse; import cn.odboy.model.system.response.MenuResponse;
import cn.odboy.redis.RedisHelper; import cn.odboy.redis.RedisHelper;
import cn.odboy.util.ClassUtil; import cn.odboy.util.ClassUtil;
@@ -336,7 +336,7 @@ public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements Me
/** /**
* 获取 MenuResponse * 获取 MenuResponse
* *
* @param menu / * @param menu /
* @param menuResponse / * @param menuResponse /
* @return / * @return /
*/ */
@@ -9,9 +9,7 @@ import lombok.RequiredArgsConstructor;
import org.springframework.http.HttpStatus; import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
@@ -24,23 +22,23 @@ import org.springframework.web.bind.annotation.RestController;
@RequestMapping("api/email") @RequestMapping("api/email")
@Api(tags = "工具:邮件管理") @Api(tags = "工具:邮件管理")
public class EmailController { public class EmailController {
private final EmailService emailService; private final EmailService emailService;
@GetMapping @ApiOperation("查询配置")
@PostMapping(value = "/queryEmailConfig")
public ResponseEntity<EmailConfig> queryEmailConfig() { public ResponseEntity<EmailConfig> queryEmailConfig() {
return new ResponseEntity<>(emailService.getEmailConfig(), HttpStatus.OK); return new ResponseEntity<>(emailService.getEmailConfig(), HttpStatus.OK);
} }
@PutMapping
@ApiOperation("配置邮件") @ApiOperation("配置邮件")
@PostMapping(value = "/updateEmailConfig")
public ResponseEntity<Object> updateEmailConfig(@Validated @RequestBody EmailConfig emailConfig) throws Exception { public ResponseEntity<Object> updateEmailConfig(@Validated @RequestBody EmailConfig emailConfig) throws Exception {
emailService.updateEmailConfigOnPassChange(emailConfig); emailService.updateEmailConfigOnPassChange(emailConfig);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
} }
@PostMapping
@ApiOperation("发送邮件") @ApiOperation("发送邮件")
@PostMapping(value = "/sendEmail")
public ResponseEntity<Object> sendEmail(@Validated @RequestBody SendEmailRequest sendEmailRequest) { public ResponseEntity<Object> sendEmail(@Validated @RequestBody SendEmailRequest sendEmailRequest) {
emailService.sendEmail(sendEmailRequest); emailService.sendEmail(sendEmailRequest);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
@@ -34,8 +34,8 @@ import java.io.IOException;
public class LocalStorageController { public class LocalStorageController {
private final LocalStorageService localStorageService; private final LocalStorageService localStorageService;
@GetMapping
@ApiOperation("查询文件") @ApiOperation("查询文件")
@GetMapping
@PreAuthorize("@el.check('storage:list')") @PreAuthorize("@el.check('storage:list')")
public ResponseEntity<PageResult<LocalStorage>> queryFile(QueryLocalStorageRequest criteria) { public ResponseEntity<PageResult<LocalStorage>> queryFile(QueryLocalStorageRequest criteria) {
Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize()); Page<Object> page = new Page<>(criteria.getPage(), criteria.getSize());
@@ -49,8 +49,8 @@ public class LocalStorageController {
localStorageService.downloadExcel(localStorageService.selectLocalStorageByCriteria(criteria), response); localStorageService.downloadExcel(localStorageService.selectLocalStorageByCriteria(criteria), response);
} }
@PostMapping
@ApiOperation("上传文件") @ApiOperation("上传文件")
@PostMapping
@PreAuthorize("@el.check('storage:add')") @PreAuthorize("@el.check('storage:add')")
public ResponseEntity<Object> createFile(@RequestParam String name, @RequestParam("file") MultipartFile file) { public ResponseEntity<Object> createFile(@RequestParam String name, @RequestParam("file") MultipartFile file) {
localStorageService.uploadFile(name, file); localStorageService.uploadFile(name, file);
@@ -69,16 +69,16 @@ public class LocalStorageController {
return new ResponseEntity<>(localStorage, HttpStatus.OK); return new ResponseEntity<>(localStorage, HttpStatus.OK);
} }
@PutMapping
@ApiOperation("修改文件") @ApiOperation("修改文件")
@PutMapping
@PreAuthorize("@el.check('storage:edit')") @PreAuthorize("@el.check('storage:edit')")
public ResponseEntity<Object> updateFile(@Validated @RequestBody LocalStorage resources) { public ResponseEntity<Object> updateFile(@Validated @RequestBody LocalStorage resources) {
localStorageService.updateLocalStorageById(resources); localStorageService.updateLocalStorageById(resources);
return new ResponseEntity<>(HttpStatus.NO_CONTENT); return new ResponseEntity<>(HttpStatus.NO_CONTENT);
} }
@DeleteMapping
@ApiOperation("多选删除") @ApiOperation("多选删除")
@DeleteMapping
public ResponseEntity<Object> deleteFile(@RequestBody Long[] ids) { public ResponseEntity<Object> deleteFile(@RequestBody Long[] ids) {
localStorageService.deleteFileByIds(ids); localStorageService.deleteFileByIds(ids);
return new ResponseEntity<>(HttpStatus.OK); return new ResponseEntity<>(HttpStatus.OK);
@@ -18,7 +18,6 @@ import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -41,13 +40,14 @@ public class QiniuController {
private final QiniuContentService qiniuContentService; private final QiniuContentService qiniuContentService;
private final QiNiuConfigService qiNiuConfigService; private final QiNiuConfigService qiNiuConfigService;
@GetMapping(value = "/config") @ApiOperation("查询七牛云存储配置")
@PostMapping(value = "/queryQiNiuConfig")
public ResponseEntity<QiniuConfig> queryQiNiuConfig() { public ResponseEntity<QiniuConfig> queryQiNiuConfig() {
return new ResponseEntity<>(qiNiuConfigService.getConfig(), HttpStatus.OK); return new ResponseEntity<>(qiNiuConfigService.getConfig(), HttpStatus.OK);
} }
@ApiOperation("配置七牛云存储") @ApiOperation("配置七牛云存储")
@PutMapping(value = "/config") @PostMapping(value = "/updateQiNiuConfig")
public ResponseEntity<Object> updateQiNiuConfig(@Validated @RequestBody QiniuConfig qiniuConfig) { public ResponseEntity<Object> updateQiNiuConfig(@Validated @RequestBody QiniuConfig qiniuConfig) {
qiNiuConfigService.saveConfig(qiniuConfig); qiNiuConfigService.saveConfig(qiniuConfig);
qiNiuConfigService.updateType(qiniuConfig.getType()); qiNiuConfigService.updateType(qiniuConfig.getType());
@@ -55,6 +55,7 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc
throw new BadRequestException("上传失败"); throw new BadRequestException("上传失败");
} }
try { try {
String formatSize = FileUtil.getSize(size);
name = StringUtil.isBlank(name) ? FileUtil.getPrefix(multipartFile.getOriginalFilename()) : name; name = StringUtil.isBlank(name) ? FileUtil.getPrefix(multipartFile.getOriginalFilename()) : name;
LocalStorage localStorage = new LocalStorage( LocalStorage localStorage = new LocalStorage(
file.getName(), file.getName(),
@@ -62,7 +63,7 @@ public class LocalStorageServiceImpl extends ServiceImpl<LocalStorageMapper, Loc
suffix, suffix,
file.getPath(), file.getPath(),
type, type,
FileUtil.getSize(size) formatSize
); );
save(localStorage); save(localStorage);
return localStorage; return localStorage;
+63 -3
View File
@@ -1,8 +1,68 @@
## Mapper ## Mapper(持久层)
- 分页查询:query{TableSimpleName}By{ParamName} - 分页&列表(2合1):query{TableSimpleName}By{ParamName}
- 查询列表:select{TableSimpleName}By{ParamName} - queryUserByCriteria
- queryHostByCriteria
- 分页查询:query{TableSimpleName}PageBy{ParamName}
- queryUserPageByCriteria
- queryUserPageByUserId
- 查询列表:select{TableSimpleName}ListBy{ParamName}
- selectUserListByCriteria
- selectUserListByUserId
- 查询一个:get{TableSimpleName}By{ParamName} - 查询一个:get{TableSimpleName}By{ParamName}
- getUserByUserId
- getUserByCriteria
- 批量更新:update{ParamName}ByIds - 批量更新:update{ParamName}ByIds
- updateHostNameByIds
- updateHostIPByIds
- 批量删除:delete{TableSimpleName}ByIds - 批量删除:delete{TableSimpleName}ByIds
- deleteHostByIds
- deleteUserByIds
- 统计数量:get{具体语义}Count - 统计数量:get{具体语义}Count
- getUserOnlineCount
- getAlarmTotalCount
## Service(业务层)
- 分页查询:describe{TableSimpleName}Page
- describeUserPage
- describeHostPage
- 查询列表:describe{TableSimpleName}List
- describeUserList
- describeHostList
- 查询元数据:describe{TableSimpleName}{AttributeName}MetadataOptions
- describeHostIpMetadataOptions
- describeUserSexMetadataOptions
- 批量更新:modify{TableSimpleName}Attribute
- modifyHostAttribute
- modifyUserAttribute
- modifyHostIp
- modifyUserSex
- 批量删除:delete{TableSimpleName}ByIds
- deleteHostByIds
- deleteUserByIds
- 执行业务:{action}{TableSimpleName}{s}
- createInstance 创建实例
- createInstances 批量创建实例
- startInstance 启动实例
- stopInstance 停止实例
- rebootInstance 重启实例
- renewInstance 续费实例
- reActiveInstance 激活实例
- 其他业务动词参考
- create 创建
- delete 删除
- modify 修改
- scale 扩容
- attach 追加
- remove 移除
- upgrade 升级
- sync 同步
- install 安装
- unInstall 卸载
- grant 授权
- pause 暂停
- cancel 取消
- resume 重新开始
- check 检查
- deploy 部署