Merge remote-tracking branch 'origin/master'

This commit is contained in:
liang.chao 2025-09-11 18:37:44 +08:00
commit 74f12b6948
34 changed files with 950 additions and 79 deletions

View File

@ -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);
}*/
}

View File

@ -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;

View File

@ -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));
}
}

View File

@ -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));
}
}

View File

@ -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)
{

View File

@ -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>

View File

@ -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);
}
}
}

View File

@ -27,7 +27,7 @@ public class SafeUtil {
"|<>|\\[\\]|\\(\\)|/|\"" +
"|script|alert|svg|confirm|prompt|onload" +
"|%3c|%3e|%2b|@|!|img|src" +
"|%|_)";
"|%)";
/**
* 检查特殊字符的正则表达式

View File

@ -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()

View File

@ -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();
}
}

View File

@ -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

View File

@ -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()));
/**
* 校验参数是否合法
*/

View File

@ -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)) {

View File

@ -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());
// 记录用户退出日志

View File

@ -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);

View File

@ -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;
}

View File

@ -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 + '\'' +
'}';
}
}

View File

@ -26,6 +26,11 @@ public class KyFilesMultiClassify {
*/
private String dimension;
/**
* 维度字典表配置
*/
private String dictLabel;
/**
* 分类描述
*/

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -40,4 +40,11 @@ public interface KyDataClassifyMapper {
* @return
*/
List<KyDataClassify> listAll(KyDataClassify kyDataClassify);
/**
* 根据名称查看数据
* @param kyDataClassify
* @return
*/
KyDataClassify selectKyDataClassifyByDataTypeName(KyDataClassify kyDataClassify);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);
}

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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>

View File

@ -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 &lt;= #{currentTime}
AND access_end_time &gt;= #{currentTime})
)
</select>
<select id="selectSysIpWhitelist" resultType="com.bonus.system.domain.SysIpWhitelist">
<include refid="selectSysIpWhitelistVo"/>