Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
74f12b6948
|
|
@ -0,0 +1,35 @@
|
|||
package com.bonus.web.controller.common;
|
||||
|
||||
import com.bonus.common.core.domain.AjaxResult;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
/**
|
||||
* 会话检查控制器
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/session")
|
||||
public class SessionCheckController {
|
||||
|
||||
// @Autowired
|
||||
// private SessionManagementService sessionManagementService;
|
||||
|
||||
/**
|
||||
* 检查会话状态
|
||||
*/
|
||||
/*@GetMapping("/check")
|
||||
public AjaxResult checkSession(HttpServletRequest request) {
|
||||
String sessionId = request.getSession().getId();
|
||||
|
||||
if (sessionManagementService.isSessionForcedLogout(sessionId)) {
|
||||
String message = sessionManagementService.getForceLogoutMessage(sessionId);
|
||||
return AjaxResult.error(403, message).put("forceLogout", true);
|
||||
}
|
||||
|
||||
return AjaxResult.success().put("forceLogout", false);
|
||||
}*/
|
||||
}
|
||||
|
|
@ -24,6 +24,9 @@ import com.bonus.framework.web.service.TokenService;
|
|||
import com.bonus.system.service.ISysConfigService;
|
||||
import com.bonus.system.service.ISysMenuService;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
*
|
||||
|
|
@ -54,11 +57,11 @@ public class SysLoginController
|
|||
* @return 结果
|
||||
*/
|
||||
@PostMapping("/login")
|
||||
public AjaxResult login(@RequestBody LoginBody loginBody)
|
||||
public AjaxResult login(HttpServletRequest request, @RequestBody LoginBody loginBody)
|
||||
{
|
||||
AjaxResult ajax = AjaxResult.success();
|
||||
// 生成令牌
|
||||
String token = loginService.login(loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
||||
String token = loginService.login(request,loginBody.getUsername(), loginBody.getPassword(), loginBody.getCode(),
|
||||
loginBody.getUuid());
|
||||
ajax.put(Constants.TOKEN, token);
|
||||
return ajax;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,107 @@
|
|||
package com.bonus.web.controller.tool;
|
||||
|
||||
import com.bonus.common.annotation.RequiresPermissions;
|
||||
import com.bonus.common.annotation.SysLog;
|
||||
import com.bonus.common.core.controller.BaseController;
|
||||
import com.bonus.common.core.domain.AjaxResult;
|
||||
import com.bonus.common.core.page.TableDataInfo;
|
||||
import com.bonus.common.enums.OperaType;
|
||||
import com.bonus.common.utils.DateUtils;
|
||||
import com.bonus.system.domain.KyFilesCustomizeClassify;
|
||||
import com.bonus.system.domain.KyFilesMultiClassify;
|
||||
import com.bonus.system.service.FilesCustomizeClassifyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 档案自定义分类
|
||||
* @author 马三炮
|
||||
* @date 2025/9/11
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/files/customize")
|
||||
@Slf4j
|
||||
public class FilesCustomizeClassifyController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private FilesCustomizeClassifyService filesCustomizeClassifyService;
|
||||
|
||||
/**
|
||||
* 获取档案自定义分类管理列表
|
||||
* @param kyFilesCustomizeClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->获取档案自定义分类管理列表", details = "获取档案自定义分类管理列表")
|
||||
@RequiresPermissions("files:customize:list")
|
||||
@GetMapping("/getKyFilesCustomizeClassifyList")
|
||||
public TableDataInfo getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify)
|
||||
{
|
||||
startPage();
|
||||
List<KyFilesCustomizeClassify> list = filesCustomizeClassifyService.getKyFilesCustomizeClassifyList(kyFilesCustomizeClassify);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增档案自定义分类管理
|
||||
* @param kyFilesCustomizeClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->新增档案自定义分类管理", details = "新增档案自定义分类管理")
|
||||
@RequiresPermissions("files:customize:add")
|
||||
@PostMapping("/addKyFilesCustomizeClassify")
|
||||
public AjaxResult addKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify)
|
||||
{
|
||||
|
||||
kyFilesCustomizeClassify.setCreateUserId(getUserId());
|
||||
kyFilesCustomizeClassify.setCreateUserName(getUsername());
|
||||
kyFilesCustomizeClassify.setCreateTime(DateUtils.getNowDate());
|
||||
kyFilesCustomizeClassify.setUpdateUserId(getUserId());
|
||||
kyFilesCustomizeClassify.setUpdateUserName(getUsername());
|
||||
kyFilesCustomizeClassify.setUpdateTime(DateUtils.getNowDate());
|
||||
int res = filesCustomizeClassifyService.addKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
if (res==1){
|
||||
return toAjax(res);
|
||||
}else {
|
||||
return error("分类名称已存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改档案自定义分类管理
|
||||
* @param kyFilesCustomizeClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->修改档案自定义分类管理", details = "修改档案自定义分类管理")
|
||||
@RequiresPermissions("files:customize:update")
|
||||
@PostMapping("/updateKyFilesCustomizeClassify")
|
||||
public AjaxResult updateKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify)
|
||||
{
|
||||
|
||||
kyFilesCustomizeClassify.setUpdateUserId(getUserId());
|
||||
kyFilesCustomizeClassify.setUpdateUserName(getUsername());
|
||||
kyFilesCustomizeClassify.setUpdateTime(DateUtils.getNowDate());
|
||||
int res = filesCustomizeClassifyService.updateKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
if (res==1){
|
||||
return toAjax(res);
|
||||
}else {
|
||||
return error("分类名称已存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改档案自定义分类管理
|
||||
* @param kyFilesCustomizeClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案自定义分类管理", businessType = OperaType.QUERY, module = "档案自定义分类管理->修改档案自定义分类管理", details = "修改档案自定义分类管理")
|
||||
@RequiresPermissions("files:customize:del")
|
||||
@PostMapping("/delKyFilesCustomizeClassify")
|
||||
public AjaxResult delKyFilesCustomizeClassify(@Validated @RequestBody KyFilesCustomizeClassify kyFilesCustomizeClassify)
|
||||
{
|
||||
return toAjax(filesCustomizeClassifyService.delKyFilesCustomizeClassify(kyFilesCustomizeClassify));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,107 @@
|
|||
package com.bonus.web.controller.tool;
|
||||
|
||||
import com.bonus.common.annotation.RequiresPermissions;
|
||||
import com.bonus.common.annotation.SysLog;
|
||||
import com.bonus.common.core.controller.BaseController;
|
||||
import com.bonus.common.core.domain.AjaxResult;
|
||||
import com.bonus.common.core.page.TableDataInfo;
|
||||
import com.bonus.common.enums.OperaType;
|
||||
import com.bonus.common.utils.DateUtils;
|
||||
import com.bonus.system.domain.KyDataClassify;
|
||||
import com.bonus.system.domain.KyFilesMultiClassify;
|
||||
import com.bonus.system.service.FilesMultiClassifyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 档案多维度分类管理
|
||||
* @author 马三炮
|
||||
* @date 2025/9/11
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/files/multi")
|
||||
@Slf4j
|
||||
public class FilesMultiClassifyController extends BaseController {
|
||||
|
||||
@Resource
|
||||
private FilesMultiClassifyService filesMultiClassifyService;
|
||||
|
||||
/**
|
||||
* 获取档案多维度分类管理列表
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->获取档案多维度分类管理列表", details = "获取档案多维度分类管理列表")
|
||||
@RequiresPermissions("files:multi:list")
|
||||
@GetMapping("/getKyFilesMultiClassifyList")
|
||||
public TableDataInfo getKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify)
|
||||
{
|
||||
startPage();
|
||||
List<KyFilesMultiClassify> list = filesMultiClassifyService.selectKyFilesMultiClassifyList(kyFilesMultiClassify);
|
||||
return getDataTable(list);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->新增档案多维度分类管理", details = "新增档案多维度分类管理")
|
||||
@RequiresPermissions("files:multi:add")
|
||||
@PostMapping("/addKyFilesMultiClassify")
|
||||
public AjaxResult addKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify)
|
||||
{
|
||||
|
||||
kyFilesMultiClassify.setCreateUserId(getUserId());
|
||||
kyFilesMultiClassify.setCreateUserName(getUsername());
|
||||
kyFilesMultiClassify.setCreateTime(DateUtils.getNowDate());
|
||||
kyFilesMultiClassify.setUpdateUserId(getUserId());
|
||||
kyFilesMultiClassify.setUpdateUserName(getUsername());
|
||||
kyFilesMultiClassify.setUpdateTime(DateUtils.getNowDate());
|
||||
int res = filesMultiClassifyService.addKyFilesMultiClassify(kyFilesMultiClassify);
|
||||
if (res==1){
|
||||
return toAjax(res);
|
||||
}else {
|
||||
return error("分类名称已存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->新增档案多维度分类管理", details = "新增档案多维度分类管理")
|
||||
@RequiresPermissions("files:multi:update")
|
||||
@PostMapping("/updateKyFilesMultiClassify")
|
||||
public AjaxResult updateKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify)
|
||||
{
|
||||
kyFilesMultiClassify.setUpdateUserId(getUserId());
|
||||
kyFilesMultiClassify.setUpdateUserName(getUsername());
|
||||
kyFilesMultiClassify.setUpdateTime(DateUtils.getNowDate());
|
||||
int res = filesMultiClassifyService.updateKyFilesMultiClassify(kyFilesMultiClassify);
|
||||
if (res==1){
|
||||
return toAjax(res);
|
||||
}else {
|
||||
return error("分类名称已存在");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@SysLog(title = "档案多维度分类管理", businessType = OperaType.QUERY, module = "档案多维度分类管理->删除档案多维度分类管理", details = "删除档案多维度分类管理")
|
||||
@RequiresPermissions("files:multi:del")
|
||||
@PostMapping("/delKyFilesMultiClassify")
|
||||
public AjaxResult delKyFilesMultiClassify(@Validated @RequestBody KyFilesMultiClassify kyFilesMultiClassify)
|
||||
{
|
||||
return toAjax(filesMultiClassifyService.delKyFilesMultiClassify(kyFilesMultiClassify));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -69,7 +69,13 @@ public class KyDataClassifyController extends BaseController {
|
|||
kyDataClassify.setUpdateUserId(getUserId());
|
||||
kyDataClassify.setUpdateUserName(getUsername());
|
||||
kyDataClassify.setUpdateTime(DateUtils.getNowDate());
|
||||
return toAjax(kyDataClassifyService.addKyDataClassify(kyDataClassify));
|
||||
int res = kyDataClassifyService.addKyDataClassify(kyDataClassify);
|
||||
if (res==1){
|
||||
return toAjax(res);
|
||||
}else {
|
||||
return error("数据类型名称已存在");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -109,6 +115,7 @@ public class KyDataClassifyController extends BaseController {
|
|||
* @return
|
||||
*/
|
||||
/*@PreAuthorize("@ss.hasPermi('data:classify:list')")*/
|
||||
@RequiresPermissions("data:Collect:list")
|
||||
@GetMapping("/listAll")
|
||||
public TableDataInfo listAll(KyDataClassify kyDataClassify)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -164,6 +164,11 @@
|
|||
<artifactId>spring-session-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.fasterxml.jackson.core</groupId>
|
||||
<artifactId>jackson-databind</artifactId>
|
||||
</dependency>
|
||||
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
|
|
@ -218,8 +218,8 @@ public class RequestCoverFilter implements Filter {
|
|||
throw new CaptchaException("请求参数不正确");
|
||||
}
|
||||
String calculatedHash = Sm3Util.encrypt(query);
|
||||
log.debug("计算出的哈希值: {}", calculatedHash);
|
||||
log.debug("提供的哈希值: {}", providedHmac);
|
||||
log.info("计算出的哈希值: {}", calculatedHash);
|
||||
log.info("提供的哈希值: {}", providedHmac);
|
||||
if (!calculatedHash.equals(providedHmac)) {
|
||||
log.error("参数完整性校验失败");
|
||||
throw new CaptchaException("请求参数不正确");
|
||||
|
|
@ -279,6 +279,7 @@ public class RequestCoverFilter implements Filter {
|
|||
public QueryStringRequestWrapper(HttpServletRequest request, String queryString) {
|
||||
super(request);
|
||||
this.queryString = queryString;
|
||||
// log.info("QueryStringRequestWrapper 接收到的参数: {}", queryString);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -295,7 +296,7 @@ public class RequestCoverFilter implements Filter {
|
|||
@Override
|
||||
public Map<String, String[]> getParameterMap() {
|
||||
if (cachedParameterMap == null) {
|
||||
cachedParameterMap = parseNestedQueryString(queryString);
|
||||
cachedParameterMap = parseQueryString(queryString);
|
||||
}
|
||||
return cachedParameterMap;
|
||||
}
|
||||
|
|
@ -311,52 +312,68 @@ public class RequestCoverFilter implements Filter {
|
|||
}
|
||||
|
||||
/**
|
||||
* 解析嵌套查询字符串为Map,支持 params[beginTime] 格式
|
||||
* 解析查询字符串,支持普通格式和嵌套格式
|
||||
*/
|
||||
private Map<String, String[]> parseNestedQueryString(String queryString) {
|
||||
private Map<String, String[]> parseQueryString(String queryString) {
|
||||
Map<String, String[]> parameterMap = new HashMap<>();
|
||||
if (queryString != null) {
|
||||
try {
|
||||
// 先URL解码
|
||||
String decodedQueryString = java.net.URLDecoder.decode(queryString, StandardCharsets.UTF_8.name());
|
||||
String[] pairs = decodedQueryString.split("&");
|
||||
if (queryString == null || queryString.trim().isEmpty()) {
|
||||
return parameterMap;
|
||||
}
|
||||
|
||||
for (String pair : pairs) {
|
||||
String[] keyValue = pair.split("=", 2);
|
||||
if (keyValue.length == 2) {
|
||||
String key = keyValue[0];
|
||||
String value = keyValue[1];
|
||||
// log.info("开始解析查询字符串: {}", queryString);
|
||||
|
||||
// 处理嵌套参数格式(如 params[beginTime])
|
||||
if (key.startsWith("params[") && key.endsWith("]")) {
|
||||
// 提取嵌套参数名,如从 "params[beginTime]" 提取 "beginTime"
|
||||
String nestedKey = key.substring(7, key.length() - 1);
|
||||
try {
|
||||
// 先URL解码
|
||||
String decodedQueryString = java.net.URLDecoder.decode(queryString, StandardCharsets.UTF_8.name());
|
||||
String[] pairs = decodedQueryString.split("&");
|
||||
|
||||
// 将嵌套参数转换为 params. 前缀的参数
|
||||
String paramsKey = "params[" + nestedKey + "]";
|
||||
parameterMap.put(paramsKey, new String[]{value});
|
||||
} else {
|
||||
// 普通参数处理
|
||||
if (parameterMap.containsKey(key)) {
|
||||
String[] existingValues = parameterMap.get(key);
|
||||
String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1);
|
||||
newValues[existingValues.length] = value;
|
||||
parameterMap.put(key, newValues);
|
||||
} else {
|
||||
parameterMap.put(key, new String[]{value});
|
||||
}
|
||||
}
|
||||
}
|
||||
for (String pair : pairs) {
|
||||
if (pair == null || pair.trim().isEmpty()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.warn("解析嵌套查询字符串失败,使用简单解析: {}", e.getMessage());
|
||||
return parseSimpleQueryString(queryString);
|
||||
String[] keyValue = pair.split("=", 2);
|
||||
if (keyValue.length >= 1) {
|
||||
String key = keyValue[0].trim();
|
||||
String value = keyValue.length == 2 ? keyValue[1].trim() : "";
|
||||
|
||||
// 处理嵌套参数格式(如 params[beginTime])
|
||||
if (key.startsWith("params[") && key.endsWith("]")) {
|
||||
String nestedKey = key.substring(7, key.length() - 1);
|
||||
String paramsKey = "params[" + nestedKey + "]";
|
||||
addParameter(parameterMap, paramsKey, value);
|
||||
} else {
|
||||
// 处理普通参数(如 pageNum=1, pageSize=10)
|
||||
addParameter(parameterMap, key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.warn("解析查询字符串失败: {}", e.getMessage());
|
||||
// 失败时尝试简单解析
|
||||
return parseSimpleQueryString(queryString);
|
||||
}
|
||||
|
||||
// log.info("解析后的参数Map: {}", parameterMap);
|
||||
return parameterMap;
|
||||
}
|
||||
|
||||
/**
|
||||
* 添加参数到Map,支持多值参数
|
||||
*/
|
||||
private void addParameter(Map<String, String[]> parameterMap, String key, String value) {
|
||||
if (parameterMap.containsKey(key)) {
|
||||
String[] existingValues = parameterMap.get(key);
|
||||
String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1);
|
||||
newValues[existingValues.length] = value;
|
||||
parameterMap.put(key, newValues);
|
||||
} else {
|
||||
parameterMap.put(key, new String[]{value});
|
||||
}
|
||||
// log.info("添加参数: {} = {}", key, value);
|
||||
}
|
||||
|
||||
/**
|
||||
* 简单解析查询字符串(备用方案)
|
||||
*/
|
||||
|
|
@ -369,15 +386,7 @@ public class RequestCoverFilter implements Filter {
|
|||
if (keyValue.length == 2) {
|
||||
String key = keyValue[0];
|
||||
String value = keyValue[1];
|
||||
|
||||
if (parameterMap.containsKey(key)) {
|
||||
String[] existingValues = parameterMap.get(key);
|
||||
String[] newValues = Arrays.copyOf(existingValues, existingValues.length + 1);
|
||||
newValues[existingValues.length] = value;
|
||||
parameterMap.put(key, newValues);
|
||||
} else {
|
||||
parameterMap.put(key, new String[]{value});
|
||||
}
|
||||
addParameter(parameterMap, key, value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ public class SafeUtil {
|
|||
"|<>|\\[\\]|\\(\\)|/|\"" +
|
||||
"|script|alert|svg|confirm|prompt|onload" +
|
||||
"|%3c|%3e|%2b|@|!|img|src" +
|
||||
"|%|_)";
|
||||
"|%)";
|
||||
|
||||
/**
|
||||
* 检查特殊字符的正则表达式
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import org.springframework.security.authentication.dao.DaoAuthenticationProvider
|
|||
import org.springframework.security.config.annotation.method.configuration.EnableMethodSecurity;
|
||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||
import org.springframework.security.config.http.SessionCreationPolicy;
|
||||
import org.springframework.security.core.session.SessionRegistry;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||
import org.springframework.security.web.SecurityFilterChain;
|
||||
|
|
@ -111,7 +112,7 @@ public class SecurityConfig
|
|||
.authorizeHttpRequests((requests) -> {
|
||||
permitAllUrl.getUrls().forEach(url -> requests.antMatchers(url).permitAll());
|
||||
// 对于登录login 注册register 验证码captchaImage 允许匿名访问
|
||||
requests.antMatchers("/login", "/register", "/captchaImage").permitAll()
|
||||
requests.antMatchers("/login", "/register", "/captchaImage","/session/check").permitAll()
|
||||
// 静态资源,可匿名访问
|
||||
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
|
||||
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package com.bonus.framework.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.core.session.SessionRegistry;
|
||||
import org.springframework.security.core.session.SessionRegistryImpl;
|
||||
import org.springframework.security.web.session.HttpSessionEventPublisher;
|
||||
|
||||
/**
|
||||
* Session管理配置
|
||||
*/
|
||||
@Configuration
|
||||
public class SessionConfig {
|
||||
|
||||
/**
|
||||
* 注册SessionRegistry bean
|
||||
*/
|
||||
@Bean
|
||||
public SessionRegistry sessionRegistry() {
|
||||
return new SessionRegistryImpl();
|
||||
}
|
||||
|
||||
/**
|
||||
* 注册HttpSessionEventPublisher,用于监听session创建和销毁事件
|
||||
*/
|
||||
@Bean
|
||||
public HttpSessionEventPublisher httpSessionEventPublisher() {
|
||||
return new HttpSessionEventPublisher();
|
||||
}
|
||||
}
|
||||
|
|
@ -38,6 +38,7 @@ public class ReplayAttackFilter implements Filter {
|
|||
ignoreUrlPatterns.add("/smartArchives/logout");
|
||||
ignoreUrlPatterns.add("/smartArchives/getInfo");
|
||||
ignoreUrlPatterns.add("/smartArchives/getRouters");
|
||||
ignoreUrlPatterns.add("/smartArchives/session/check");
|
||||
}
|
||||
|
||||
@Autowired
|
||||
|
|
|
|||
|
|
@ -5,6 +5,7 @@ import com.bonus.common.core.domain.AjaxResult;
|
|||
import com.bonus.common.utils.SafeUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.AsyncHandlerInterceptor;
|
||||
|
||||
|
|
@ -33,6 +34,7 @@ public class ParamSecureHandler implements AsyncHandlerInterceptor {
|
|||
ignoreUrlPatterns.add("/smartArchives/logout");
|
||||
ignoreUrlPatterns.add("/smartArchives/getInfo");
|
||||
ignoreUrlPatterns.add("/smartArchives/getRouters");
|
||||
ignoreUrlPatterns.add("/smartArchives/session/check");
|
||||
}
|
||||
private String rnd = null;
|
||||
|
||||
|
|
@ -67,6 +69,7 @@ public class ParamSecureHandler implements AsyncHandlerInterceptor {
|
|||
}
|
||||
XssRequestWrapper requestWrapper = new XssRequestWrapper(request);
|
||||
|
||||
// System.err.println(JSON.toJSONString(request.getParameterMap()));
|
||||
/**
|
||||
* 校验参数是否合法
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ import java.util.ArrayList;
|
|||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/**
|
||||
|
|
@ -47,12 +46,12 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
}
|
||||
String requestBody = stringBuilder.toString();
|
||||
|
||||
// 进行XSS清理
|
||||
streamParam = xssClean(requestBody);
|
||||
// 不变更请求体,只做检测
|
||||
streamParam = requestBody;
|
||||
body = streamParam.getBytes(request.getCharacterEncoding() != null ?
|
||||
request.getCharacterEncoding() : "UTF-8");
|
||||
|
||||
// 检查安全性
|
||||
// 检查安全性(仅校验,不篡改)
|
||||
String queryStr = request.getQueryString();
|
||||
setChecked(xssCleanNew(requestBody) && (queryStr == null || xssCleanNew(queryStr)));
|
||||
|
||||
|
|
@ -63,7 +62,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
setChecked(false);
|
||||
}
|
||||
|
||||
queryString = xssClean(request.getQueryString());
|
||||
// 不对查询串做篡改,保持原样,防止影响参数绑定
|
||||
queryString = request.getQueryString();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -166,18 +166,14 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
private static final String regex9 = "vbscript:";
|
||||
private static final String regex10 = "onload(.*?)=";
|
||||
|
||||
// 添加安全脚本模式
|
||||
public static final String SAFE_SCRIPT_PATTERN = "(\\||;|\\$|'|\\'|0x0d|0x0a|\\%27|\\%3B|<>|\\[\\]|\\(\\)|\"|script|alert|svg|confirm|prompt|onload|%3c|%3e|%2b|@|!|img|src)";
|
||||
// 安全模式:移除过度严格的字符级别清理,避免破坏 JSON/参数结构
|
||||
// public static final String SAFE_SCRIPT_PATTERN = "(\\||;|\\$|'|\\'|0x0d|0x0a|\\%27|\\%3B|_|.)";
|
||||
|
||||
private String xssClean(String value) {
|
||||
if (value == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// 移除空字符串替换(这行代码没有实际效果)
|
||||
// value = value.replaceAll("", "");
|
||||
|
||||
// 使用预编译的模式提高性能
|
||||
value = Pattern.compile(regex1, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll("");
|
||||
value = Pattern.compile(regex2, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll("");
|
||||
value = Pattern.compile(regex3, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll("");
|
||||
|
|
@ -188,8 +184,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
value = Pattern.compile(regex8, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll("");
|
||||
value = Pattern.compile(regex9, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll("");
|
||||
value = Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL).matcher(value).replaceAll("");
|
||||
// 添加额外的安全过滤
|
||||
value = Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll("");
|
||||
// 移除对普通字符的全量替换,防止破坏字段名/JSON结构
|
||||
// value = Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE).matcher(value).replaceAll("");
|
||||
return value;
|
||||
}
|
||||
|
||||
|
|
@ -215,7 +211,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
patterns.add(Pattern.compile(regex8, Pattern.CASE_INSENSITIVE));
|
||||
patterns.add(Pattern.compile(regex9, Pattern.CASE_INSENSITIVE));
|
||||
patterns.add(Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL));
|
||||
patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE));
|
||||
// 移除过度严格的 SAFE_SCRIPT_PATTERN 检查
|
||||
// patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE));
|
||||
|
||||
for (Pattern pattern : patterns) {
|
||||
if (match(pattern, value)) {
|
||||
|
|
@ -332,7 +329,8 @@ public class XssRequestWrapper extends HttpServletRequestWrapper {
|
|||
patterns.add(Pattern.compile(regex8, Pattern.CASE_INSENSITIVE));
|
||||
patterns.add(Pattern.compile(regex9, Pattern.CASE_INSENSITIVE));
|
||||
patterns.add(Pattern.compile(regex10, Pattern.CASE_INSENSITIVE | Pattern.MULTILINE | Pattern.DOTALL));
|
||||
patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE));
|
||||
// 移除过度严格的 SAFE_SCRIPT_PATTERN 检查
|
||||
// patterns.add(Pattern.compile(SAFE_SCRIPT_PATTERN, Pattern.CASE_INSENSITIVE));
|
||||
|
||||
for (Pattern pattern : patterns) {
|
||||
if (match(pattern, value)) {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import java.io.IOException;
|
|||
import javax.servlet.ServletException;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.security.core.Authentication;
|
||||
|
|
@ -30,6 +31,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
|
|||
@Autowired
|
||||
private TokenService tokenService;
|
||||
|
||||
|
||||
/**
|
||||
* 退出处理
|
||||
*
|
||||
|
|
@ -43,6 +45,7 @@ public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
|
|||
if (StringUtils.isNotNull(loginUser))
|
||||
{
|
||||
String userName = loginUser.getUsername();
|
||||
String sessionId = request.getSession().getId();
|
||||
// 删除用户缓存记录
|
||||
tokenService.delLoginUser(loginUser.getToken());
|
||||
// 记录用户退出日志
|
||||
|
|
|
|||
|
|
@ -1,11 +1,14 @@
|
|||
package com.bonus.framework.web.service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.security.authentication.AuthenticationManager;
|
||||
import org.springframework.security.authentication.BadCredentialsException;
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.security.core.context.SecurityContextHolder;
|
||||
import org.springframework.stereotype.Component;
|
||||
import com.bonus.common.constant.CacheConstants;
|
||||
import com.bonus.common.constant.Constants;
|
||||
|
|
@ -52,6 +55,8 @@ public class SysLoginService
|
|||
@Autowired
|
||||
private ISysConfigService configService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 登录验证
|
||||
*
|
||||
|
|
@ -61,7 +66,7 @@ public class SysLoginService
|
|||
* @param uuid 唯一标识
|
||||
* @return 结果
|
||||
*/
|
||||
public String login(String username, String password, String code, String uuid)
|
||||
public String login(HttpServletRequest request,String username, String password, String code, String uuid)
|
||||
{
|
||||
// 验证码校验
|
||||
validateCaptcha(username, code, uuid);
|
||||
|
|
|
|||
|
|
@ -84,11 +84,12 @@ public class KyDataClassify {
|
|||
this.dataTypeName = dataTypeName;
|
||||
}
|
||||
|
||||
@Size(min = 0, max = 255, message = "备注不能超过255个字符")
|
||||
public String getRemark() {
|
||||
return remark;
|
||||
}
|
||||
|
||||
@Size(min = 0, max = 255, message = "备注不能超过255个字符")
|
||||
|
||||
public void setRemark(String remark) {
|
||||
this.remark = remark;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,157 @@
|
|||
package com.bonus.system.domain;
|
||||
|
||||
import javax.validation.constraints.Size;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author 马三炮
|
||||
* @date 2025/9/11
|
||||
*/
|
||||
public class KyFilesCustomizeClassify {
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 自定义分类名称
|
||||
*/
|
||||
private String customizeClassifyName;
|
||||
|
||||
/**
|
||||
* 分类描述
|
||||
*/
|
||||
private String classifyDesc;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 修改时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long createUserId;
|
||||
|
||||
/**
|
||||
* 创建人姓名
|
||||
*/
|
||||
private String createUserName;
|
||||
|
||||
/**
|
||||
* 修改人
|
||||
*/
|
||||
private Long updateUserId;
|
||||
|
||||
/**
|
||||
* 修改人姓名
|
||||
*/
|
||||
private String updateUserName;
|
||||
|
||||
/**
|
||||
* 是否删除 0. 删除 1.未删除
|
||||
*/
|
||||
private String delFlag;
|
||||
|
||||
public Long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
@Size(min = 0, max = 64, message = "自定义分类名称超过64个字符")
|
||||
public String getCustomizeClassifyName() {
|
||||
return customizeClassifyName;
|
||||
}
|
||||
|
||||
public void setCustomizeClassifyName(String customizeClassifyName) {
|
||||
this.customizeClassifyName = customizeClassifyName;
|
||||
}
|
||||
@Size(min = 0, max = 255, message = "分类描述超过64个字符")
|
||||
public String getClassifyDesc() {
|
||||
return classifyDesc;
|
||||
}
|
||||
|
||||
public void setClassifyDesc(String classifyDesc) {
|
||||
this.classifyDesc = classifyDesc;
|
||||
}
|
||||
|
||||
public Date getCreateTime() {
|
||||
return createTime;
|
||||
}
|
||||
|
||||
public void setCreateTime(Date createTime) {
|
||||
this.createTime = createTime;
|
||||
}
|
||||
|
||||
public Date getUpdateTime() {
|
||||
return updateTime;
|
||||
}
|
||||
|
||||
public void setUpdateTime(Date updateTime) {
|
||||
this.updateTime = updateTime;
|
||||
}
|
||||
|
||||
public Long getCreateUserId() {
|
||||
return createUserId;
|
||||
}
|
||||
|
||||
public void setCreateUserId(Long createUserId) {
|
||||
this.createUserId = createUserId;
|
||||
}
|
||||
|
||||
public String getCreateUserName() {
|
||||
return createUserName;
|
||||
}
|
||||
|
||||
public void setCreateUserName(String createUserName) {
|
||||
this.createUserName = createUserName;
|
||||
}
|
||||
|
||||
public Long getUpdateUserId() {
|
||||
return updateUserId;
|
||||
}
|
||||
|
||||
public void setUpdateUserId(Long updateUserId) {
|
||||
this.updateUserId = updateUserId;
|
||||
}
|
||||
|
||||
public String getUpdateUserName() {
|
||||
return updateUserName;
|
||||
}
|
||||
|
||||
public void setUpdateUserName(String updateUserName) {
|
||||
this.updateUserName = updateUserName;
|
||||
}
|
||||
|
||||
public String getDelFlag() {
|
||||
return delFlag;
|
||||
}
|
||||
|
||||
public void setDelFlag(String delFlag) {
|
||||
this.delFlag = delFlag;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "KyFilesCustomizeClassify{" +
|
||||
"id=" + id +
|
||||
", customizeClassifyName='" + customizeClassifyName + '\'' +
|
||||
", classifyDesc='" + classifyDesc + '\'' +
|
||||
", createTime=" + createTime +
|
||||
", updateTime=" + updateTime +
|
||||
", createUserId=" + createUserId +
|
||||
", createUserName='" + createUserName + '\'' +
|
||||
", updateUserId=" + updateUserId +
|
||||
", updateUserName='" + updateUserName + '\'' +
|
||||
", delFlag='" + delFlag + '\'' +
|
||||
'}';
|
||||
}
|
||||
}
|
||||
|
|
@ -26,6 +26,11 @@ public class KyFilesMultiClassify {
|
|||
*/
|
||||
private String dimension;
|
||||
|
||||
|
||||
/**
|
||||
* 维度(字典表配置)
|
||||
*/
|
||||
private String dictLabel;
|
||||
/**
|
||||
* 分类描述
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -5,5 +5,10 @@ import com.bonus.system.domain.KyDataCollectData;
|
|||
import java.util.List;
|
||||
|
||||
public interface DataCollectDataMapper {
|
||||
/**
|
||||
* 根据数据类型数据汇集管理列表
|
||||
* @param kyDataCollectData
|
||||
* @return
|
||||
*/
|
||||
List<KyDataCollectData> selectKyDataCollectDataList(KyDataCollectData kyDataCollectData);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,17 @@
|
|||
package com.bonus.system.mapper;
|
||||
|
||||
import com.bonus.system.domain.KyFilesCustomizeClassify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FilesCustomizeClassifyMapper {
|
||||
List<KyFilesCustomizeClassify> getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
KyFilesCustomizeClassify getKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
}
|
||||
|
|
@ -0,0 +1,44 @@
|
|||
package com.bonus.system.mapper;
|
||||
|
||||
|
||||
import com.bonus.system.domain.KyFilesMultiClassify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FilesMultiClassifyMapper {
|
||||
|
||||
/**
|
||||
* 获取档案多维度分类管理列表
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
List<KyFilesMultiClassify> selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 新增档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 根据名称查询档案多维度分类
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
KyFilesMultiClassify getKyFilesMultiClassifyByClassifyName(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 修改档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 删除档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
}
|
||||
|
|
@ -40,4 +40,11 @@ public interface KyDataClassifyMapper {
|
|||
* @return
|
||||
*/
|
||||
List<KyDataClassify> listAll(KyDataClassify kyDataClassify);
|
||||
|
||||
/**
|
||||
* 根据名称查看数据
|
||||
* @param kyDataClassify
|
||||
* @return
|
||||
*/
|
||||
KyDataClassify selectKyDataClassifyByDataTypeName(KyDataClassify kyDataClassify);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,5 +5,10 @@ import com.bonus.system.domain.KyDataCollectData;
|
|||
import java.util.List;
|
||||
|
||||
public interface DataCollectDataService {
|
||||
/**
|
||||
* 根据数据类型数据汇集管理列表
|
||||
* @param kyDataCollectData
|
||||
* @return
|
||||
*/
|
||||
List<KyDataCollectData> selectKyDataCollectDataList(KyDataCollectData kyDataCollectData);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,15 @@
|
|||
package com.bonus.system.service;
|
||||
|
||||
import com.bonus.system.domain.KyFilesCustomizeClassify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FilesCustomizeClassifyService {
|
||||
List<KyFilesCustomizeClassify> getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
|
||||
int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify);
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.bonus.system.service;
|
||||
|
||||
import com.bonus.system.domain.KyDataClassify;
|
||||
import com.bonus.system.domain.KyFilesMultiClassify;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface FilesMultiClassifyService {
|
||||
/**
|
||||
* 获取档案多维度分类管理列表
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
List<KyFilesMultiClassify> selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 新增档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 修改档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
|
||||
/**
|
||||
* 删除档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify);
|
||||
}
|
||||
|
|
@ -20,6 +20,11 @@ public class DataCollectDataServiceImpl implements DataCollectDataService {
|
|||
@Resource
|
||||
private DataCollectDataMapper dataCollectDataMapper;
|
||||
|
||||
/**
|
||||
* 根据数据类型数据汇集管理列表
|
||||
* @param kyDataCollectData
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<KyDataCollectData> selectKyDataCollectDataList(KyDataCollectData kyDataCollectData) {
|
||||
return dataCollectDataMapper.selectKyDataCollectDataList(kyDataCollectData);
|
||||
|
|
|
|||
|
|
@ -0,0 +1,51 @@
|
|||
package com.bonus.system.service.impl;
|
||||
|
||||
import com.bonus.common.utils.StringUtils;
|
||||
import com.bonus.system.domain.KyFilesCustomizeClassify;
|
||||
import com.bonus.system.mapper.FilesCustomizeClassifyMapper;
|
||||
import com.bonus.system.service.FilesCustomizeClassifyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 马三炮
|
||||
* @date 2025/9/11
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class FilesCustomizeClassifyServiceImpl implements FilesCustomizeClassifyService {
|
||||
|
||||
@Resource
|
||||
private FilesCustomizeClassifyMapper filesCustomizeClassifyMapper;
|
||||
|
||||
@Override
|
||||
public List<KyFilesCustomizeClassify> getKyFilesCustomizeClassifyList(KyFilesCustomizeClassify kyFilesCustomizeClassify) {
|
||||
return filesCustomizeClassifyMapper.getKyFilesCustomizeClassifyList(kyFilesCustomizeClassify);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int addKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) {
|
||||
KyFilesCustomizeClassify kyFilesCustomizeClassifyOld = filesCustomizeClassifyMapper.getKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
if (StringUtils.isNotNull(kyFilesCustomizeClassifyOld)){
|
||||
return 0;
|
||||
}
|
||||
return filesCustomizeClassifyMapper.addKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) {
|
||||
KyFilesCustomizeClassify kyFilesCustomizeClassifyOld = filesCustomizeClassifyMapper.getKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
if (StringUtils.isNotNull(kyFilesCustomizeClassifyOld) && !kyFilesCustomizeClassify.getId().equals(kyFilesCustomizeClassifyOld.getId())){
|
||||
return 0;
|
||||
}
|
||||
return filesCustomizeClassifyMapper.updateKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delKyFilesCustomizeClassify(KyFilesCustomizeClassify kyFilesCustomizeClassify) {
|
||||
return filesCustomizeClassifyMapper.delKyFilesCustomizeClassify(kyFilesCustomizeClassify);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,74 @@
|
|||
package com.bonus.system.service.impl;
|
||||
|
||||
import com.bonus.common.utils.StringUtils;
|
||||
import com.bonus.system.domain.KyDataClassify;
|
||||
import com.bonus.system.domain.KyFilesMultiClassify;
|
||||
import com.bonus.system.mapper.FilesMultiClassifyMapper;
|
||||
import com.bonus.system.service.FilesMultiClassifyService;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author 马三炮
|
||||
* @date 2025/9/11
|
||||
*/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class FilesMultiClassifyServiceImpl implements FilesMultiClassifyService {
|
||||
|
||||
@Resource
|
||||
private FilesMultiClassifyMapper filesMultiClassifyMapper;
|
||||
|
||||
/**
|
||||
* 获取档案多维度分类管理列表
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public List<KyFilesMultiClassify> selectKyFilesMultiClassifyList(KyFilesMultiClassify kyFilesMultiClassify) {
|
||||
return filesMultiClassifyMapper.selectKyFilesMultiClassifyList(kyFilesMultiClassify);
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public int addKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) {
|
||||
//查看分类名称是否存在
|
||||
KyFilesMultiClassify kyFilesMultiClassifyOld = filesMultiClassifyMapper.getKyFilesMultiClassifyByClassifyName(kyFilesMultiClassify);
|
||||
if (StringUtils.isNotNull(kyFilesMultiClassifyOld)){
|
||||
return 0;
|
||||
}
|
||||
return filesMultiClassifyMapper.addKyFilesMultiClassify(kyFilesMultiClassify);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public int updateKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) {
|
||||
//查看分类名称是否存在
|
||||
KyFilesMultiClassify kyFilesMultiClassifyOld = filesMultiClassifyMapper.getKyFilesMultiClassifyByClassifyName(kyFilesMultiClassify);
|
||||
if (StringUtils.isNotNull(kyFilesMultiClassifyOld) && !kyFilesMultiClassify.getId().equals(kyFilesMultiClassifyOld.getId())){
|
||||
return 0;
|
||||
}
|
||||
return filesMultiClassifyMapper.updateKyFilesMultiClassify(kyFilesMultiClassify);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除档案多维度分类管理
|
||||
* @param kyFilesMultiClassify
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public int delKyFilesMultiClassify(KyFilesMultiClassify kyFilesMultiClassify) {
|
||||
return filesMultiClassifyMapper.delKyFilesMultiClassify(kyFilesMultiClassify);
|
||||
}
|
||||
}
|
||||
|
|
@ -3,6 +3,7 @@ package com.bonus.system.service.impl;
|
|||
import com.bonus.common.core.domain.entity.SysUser;
|
||||
import com.bonus.common.utils.DateUtils;
|
||||
import com.bonus.common.utils.SecurityUtils;
|
||||
import com.bonus.common.utils.StringUtils;
|
||||
import com.bonus.system.domain.KyDataClassify;
|
||||
import com.bonus.system.mapper.KyDataClassifyMapper;
|
||||
import com.bonus.system.service.KyDataClassifyService;
|
||||
|
|
@ -40,6 +41,11 @@ public class KyDataClassifyServiceImpl implements KyDataClassifyService {
|
|||
*/
|
||||
@Override
|
||||
public int addKyDataClassify(KyDataClassify kyDataClassify) {
|
||||
//判读数据名称是否存在
|
||||
KyDataClassify kyDataClassifyOld = kyDataClassifyMapper.selectKyDataClassifyByDataTypeName(kyDataClassify);
|
||||
if (StringUtils.isNotNull(kyDataClassifyOld)){
|
||||
return 0;
|
||||
}
|
||||
return kyDataClassifyMapper.addKyDataClassify(kyDataClassify);
|
||||
}
|
||||
|
||||
|
|
@ -50,6 +56,11 @@ public class KyDataClassifyServiceImpl implements KyDataClassifyService {
|
|||
*/
|
||||
@Override
|
||||
public int updateKyDataClassify(KyDataClassify kyDataClassify) {
|
||||
//判读数据名称是否存在
|
||||
KyDataClassify kyDataClassifyOld = kyDataClassifyMapper.selectKyDataClassifyByDataTypeName(kyDataClassify);
|
||||
if (StringUtils.isNotNull(kyDataClassifyOld) && !kyDataClassify.getId().equals(kyDataClassifyOld.getId())){
|
||||
return 0;
|
||||
}
|
||||
return kyDataClassifyMapper.updateKyDataClassify(kyDataClassify);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
from da_ky_data_collect_data
|
||||
where del_flag = '1'
|
||||
<if test="dataClassifyId!=null">
|
||||
data_classify_id = #{dataClassifyId}
|
||||
AND data_classify_id = #{dataClassifyId}
|
||||
</if>
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,50 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.system.mapper.FilesCustomizeClassifyMapper">
|
||||
<insert id="addKyFilesCustomizeClassify">
|
||||
insert into da_ky_files_customize_classify
|
||||
(customize_classify_name,classify_desc,create_time,update_time,create_user_id,create_user_name,update_user_id,update_user_name)
|
||||
values (#{customizeClassifyName},#{classifyDesc},#{classifyDesc},#{createTime},#{updateTime},#{createUserId},#{createUserName},#{updateUserId},#{updateUserName})
|
||||
|
||||
</insert>
|
||||
<update id="updateKyFilesCustomizeClassify">
|
||||
update da_ky_files_customize_classify
|
||||
<trim prefix="set" suffixOverrides=",">
|
||||
<if test="customizeClassifyName!=null">
|
||||
customize_classify_name =#{customizeClassifyName},
|
||||
</if>
|
||||
<if test="classifyDesc!=null">
|
||||
classify_desc =#{classifyDesc},
|
||||
</if>
|
||||
<if test="updateUserId!=null">
|
||||
update_user_id =#{updateUserId},
|
||||
</if>
|
||||
<if test="updateUserName!=null">
|
||||
update_user_name =#{updateUserName},
|
||||
</if>
|
||||
<if test="updateTime!=null">
|
||||
update_time =#{updateTime},
|
||||
</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
<delete id="delKyFilesCustomizeClassify">
|
||||
update da_ky_files_customize_classify set del_flag = '0' where id = #{id}
|
||||
</delete>
|
||||
|
||||
<select id="getKyFilesCustomizeClassifyList" resultType="com.bonus.system.domain.KyFilesCustomizeClassify">
|
||||
select id,customize_classify_name,classify_desc,create_time,update_time,create_user_id,create_user_name,
|
||||
update_user_id,update_user_name
|
||||
from da_ky_files_customize_classify where del_flag = '1'
|
||||
<if test="customizeClassifyName!=null">
|
||||
and customize_classify_name LIKE CONCAT('%', #{customizeClassifyName}, '%')
|
||||
</if>
|
||||
</select>
|
||||
<select id="getKyFilesCustomizeClassify" resultType="com.bonus.system.domain.KyFilesCustomizeClassify">
|
||||
select id,customize_classify_name,classify_desc,create_time,update_time,create_user_id,create_user_name,
|
||||
update_user_id,update_user_name
|
||||
from da_ky_files_customize_classify where del_flag = '1' and customize_classify_name =#{customizeClassifyName}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,57 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper
|
||||
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.bonus.system.mapper.FilesMultiClassifyMapper">
|
||||
<insert id="addKyFilesMultiClassify">
|
||||
insert into da_ky_files_multi_classify
|
||||
(classify_name,dimension,classify_desc,create_time,update_time,create_user_id,create_user_name,update_user_id,update_user_name)
|
||||
values (#{classifyName},#{dimension},#{classifyDesc},#{createTime},#{updateTime},#{createUserId},#{createUserName},#{updateUserId},#{updateUserName})
|
||||
</insert>
|
||||
<update id="updateKyFilesMultiClassify">
|
||||
update da_ky_files_multi_classify
|
||||
<trim prefix="set" suffixOverrides=",">
|
||||
<if test="classifyName!=null">
|
||||
classify_name =#{classifyName},
|
||||
</if>
|
||||
<if test="dimension!=null">
|
||||
dimension =#{dimension},
|
||||
</if>
|
||||
<if test="classifyDesc!=null">
|
||||
classify_desc =#{classifyDesc},
|
||||
</if>
|
||||
<if test="updateUserId!=null">
|
||||
update_user_id =#{updateUserId},
|
||||
</if>
|
||||
<if test="updateUserName!=null">
|
||||
update_user_name =#{updateUserName},
|
||||
</if>
|
||||
<if test="updateTime!=null">
|
||||
update_time =#{updateTime},
|
||||
</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
<delete id="delKyFilesMultiClassify">
|
||||
update da_ky_files_multi_classify set del_flag='0' where id = #{id}
|
||||
</delete>
|
||||
|
||||
|
||||
<select id="selectKyFilesMultiClassifyList" resultType="com.bonus.system.domain.KyFilesMultiClassify">
|
||||
select dkfmc.id,dkfmc.classify_name,dkfmc.dimension,dkfmc.classify_desc,dkfmc.update_time,
|
||||
dkfmc.update_user_id,dkfmc.update_user_name,dksdd.dict_label as dictLabel
|
||||
from da_ky_files_multi_classify dkfmc
|
||||
left join da_ky_sys_dict_data dksdd on dkfmc.dimension = dksdd.dict_code
|
||||
where dkfmc.del_flag='1'
|
||||
<if test="classifyName!=null">
|
||||
and classify_name LIKE CONCAT('%', #{classifyName}, '%')
|
||||
</if>
|
||||
</select>
|
||||
<select id="getKyFilesMultiClassifyByClassifyName"
|
||||
resultType="com.bonus.system.domain.KyFilesMultiClassify">
|
||||
select dkfmc.id,dkfmc.classify_name,dkfmc.dimension,dkfmc.classify_desc,dkfmc.update_time,
|
||||
dkfmc.update_user_id,dkfmc.update_user_name
|
||||
from da_ky_files_multi_classify dkfmc
|
||||
where dkfmc.del_flag='1' = #{classifyName}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
@ -20,6 +20,12 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="updateUserName!=null">
|
||||
update_user_name =#{updateUserName},
|
||||
</if>
|
||||
<if test="updateTime!=null">
|
||||
update_time =#{updateTime},
|
||||
</if>
|
||||
<if test="remark!=null">
|
||||
remark =#{remark},
|
||||
</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
|
@ -33,6 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="dataTypeName!=null">
|
||||
and data_type_name LIKE CONCAT('%', #{dataTypeName}, '%')
|
||||
</if>
|
||||
order by create_time desc
|
||||
</select>
|
||||
<select id="listAll" resultType="com.bonus.system.domain.KyDataClassify">
|
||||
select id,data_type_name
|
||||
|
|
@ -41,4 +48,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
and data_type_name LIKE CONCAT('%', #{dataTypeName}, '%')
|
||||
</if>
|
||||
</select>
|
||||
<select id="selectKyDataClassifyByDataTypeName" resultType="com.bonus.system.domain.KyDataClassify">
|
||||
select id,data_type_name,remark,update_time,update_user_id,update_user_name
|
||||
from da_ky_data_classify where del_flag='1' and data_type_name = #{dataTypeName}
|
||||
</select>
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -65,17 +65,23 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
SELECT COUNT(*)
|
||||
FROM da_ky_sys_ip_whitelist
|
||||
WHERE status = '0'
|
||||
AND (
|
||||
(ip_address = #{ip} AND ip_address IS NOT NULL)
|
||||
OR
|
||||
(ip_range_start IS NOT NULL AND ip_range_end IS NOT NULL
|
||||
AND INET_ATON(#{ip}) BETWEEN INET_ATON(ip_range_start) AND INET_ATON(ip_range_end))
|
||||
)
|
||||
AND (
|
||||
AND (
|
||||
(TRIM(ip_address) = #{ip})
|
||||
OR
|
||||
(ip_range_start IS NOT NULL
|
||||
AND ip_range_end IS NOT NULL
|
||||
AND TRIM(ip_range_start) != ''
|
||||
AND TRIM(ip_range_end) != ''
|
||||
AND INET_ATON(#{ip}) BETWEEN
|
||||
INET_ATON(TRIM(ip_range_start)) AND
|
||||
INET_ATON(TRIM(ip_range_end)))
|
||||
)
|
||||
AND (
|
||||
(access_start_time IS NULL AND access_end_time IS NULL)
|
||||
OR
|
||||
(#{currentTime} BETWEEN access_start_time AND access_end_time)
|
||||
)
|
||||
OR
|
||||
(access_start_time <= #{currentTime}
|
||||
AND access_end_time >= #{currentTime})
|
||||
)
|
||||
</select>
|
||||
<select id="selectSysIpWhitelist" resultType="com.bonus.system.domain.SysIpWhitelist">
|
||||
<include refid="selectSysIpWhitelistVo"/>
|
||||
|
|
|
|||
Loading…
Reference in New Issue