Initial commit: reorganized source tree

- backend/: 13 Maven modules (cw-elevator-application, cloudwalk-cloud, intelligent-cwoscomponent, ninca-crk, etc.)
- frontend/: 4 Vue projects (elevator-front, cwos-portal, alarm-front, front_acs) + decompiled + scripts
- scripts/: build, test-env, tools (Docker Compose, service templates, API parity)
- docs/: AGENTS.md, superpowers specs, architecture docs
- .gitignore: standard Java/Maven exclusions

Moved from legacy maven-*/ root layout to backend/ organized structure.
This commit is contained in:
hpd840321
2026-05-09 09:00:12 +08:00
commit 7b2bd307f1
7260 changed files with 612980 additions and 0 deletions
@@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>cn.cloudwalk.cloud</groupId>
<artifactId>cloudwalk-cloud-common</artifactId>
<version>3.7.2-Brussels-SRX</version>
<relativePath>../cloudwalk-cloud-common/pom.xml</relativePath>
</parent>
<artifactId>cloudwalk-common-web</artifactId>
<packaging>jar</packaging>
<name>cloudwalk-common-web</name>
<description>源码来自 反1 zip。</description>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
</dependency>
<dependency>
<groupId>cn.cloudwalk.cloud</groupId>
<artifactId>cloudwalk-common-result</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,54 @@
package cn.cloudwalk.web.filter;
import cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder;
import cn.cloudwalk.cloud.context.CloudwalkSessionObject;
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.springframework.web.filter.OncePerRequestFilter;
@Component
@Order(2147483547)
public class CloudwalkContextParameterFilter extends OncePerRequestFilter {
@Autowired
private CloudwalkSessionContextHolder cloudwalkSessionContextHolder;
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
throws ServletException, IOException {
String businessId = request.getHeader("businessId");
String userId = request.getHeader("platformUserId");
if (StringUtils.isEmpty(userId)) {
userId = "platformUserId";
}
String username = request.getHeader("username");
if (StringUtils.isEmpty(username)) {
username = "username";
}
String serviceCode = request.getHeader("serviceCode");
String corpCode = request.getHeader("corpCode");
CloudwalkSessionObject sessionObject = new CloudwalkSessionObject(userId, serviceCode, businessId, corpCode,
username);
this.cloudwalkSessionContextHolder.putSession(sessionObject);
try {
chain.doFilter((ServletRequest) request, (ServletResponse) response);
} finally {
this.cloudwalkSessionContextHolder.clearSession();
}
}
}
@@ -0,0 +1,17 @@
package cn.cloudwalk.web.filter;
public interface GeneralParameterConst {
public static final String BUSINESS_ID = "businessId";
public static final String CORP_CODE = "corpCode";
public static final String SERVICE_CODE = "serviceCode";
public static final String USER_ID = "platformUserId";
public static final String USER_NAME = "username";
public static final String DEFAULT_USER_ID = "0";
public static final String DEFAULT_USER_NAME = "默认用户";
}
@@ -0,0 +1,38 @@
package cn.cloudwalk.web.start.config;
import cn.cloudwalk.cloud.context.CloudwalkSessionContextHolder;
import java.util.Locale;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.LocaleResolver;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.i18n.LocaleChangeInterceptor;
import org.springframework.web.servlet.i18n.SessionLocaleResolver;
@Configuration
public class LocaleConfiguration extends WebMvcConfigurerAdapter {
@Bean
public LocaleResolver localeResolver() {
SessionLocaleResolver slr = new SessionLocaleResolver();
slr.setDefaultLocale(Locale.SIMPLIFIED_CHINESE);
return (LocaleResolver) slr;
}
@Bean
public LocaleChangeInterceptor localeChangeInterceptor() {
LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor();
interceptor.setParamName("lang");
return interceptor;
}
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor((HandlerInterceptor) localeChangeInterceptor());
}
@Bean
public CloudwalkSessionContextHolder cloudwalkSessionContextHolder() {
return new CloudwalkSessionContextHolder();
}
}
@@ -0,0 +1,24 @@
package cn.cloudwalk.web.xss.filter;
import cn.cloudwalk.web.xss.wrapper.XssHttpServletRequestWrapper;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class XssFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
chain.doFilter((ServletRequest) new XssHttpServletRequestWrapper((HttpServletRequest) request), response);
}
public void destroy() {
}
}
@@ -0,0 +1,56 @@
package cn.cloudwalk.web.xss.util;
import java.util.regex.Pattern;
import org.apache.commons.lang3.StringUtils;
public class CustomXssUtil {
private static final Pattern SCRIPT_PATTERN = Pattern.compile("<script>(.*?)</script>", 2);
private static final Pattern SRC_PATTERN1 = Pattern.compile("src[\r\n]*=[\r\n]*\\'(.*?)\\'", 42);
private static final Pattern SRC_PATTERN2 = Pattern.compile("src[\r\n]*=[\r\n]*\\\"(.*?)\\\"", 42);
private static final Pattern SINGLE_SCRIPT_PATTERN1 = Pattern.compile("</script>", 2);
private static final Pattern SINGLE_SCRIPT_PATTERN2 = Pattern.compile("<script(.*?)>", 42);
private static final Pattern IMG_SCRIPT_PATTERN = Pattern.compile("<img.*?on.*?=.*?>", 2);
private static final Pattern EVAL_PATTERN = Pattern.compile("eval\\((.*?)\\)", 42);
private static final Pattern EXPRESSION_PATTERN = Pattern.compile("expression\\((.*?)\\)", 42);
private static final Pattern JS_PATTERN = Pattern.compile("javascript:", 2);
private static final Pattern VBS_PATTERN = Pattern.compile("vbscript:", 2);
private static final Pattern ONLOAD_PATTERN = Pattern.compile("onload(.*?)=", 42);
public static String stripXSS(String value) {
if (StringUtils.isBlank(value)) {
return value;
}
value = SCRIPT_PATTERN.matcher(value).replaceAll("");
value = SRC_PATTERN1.matcher(value).replaceAll("");
value = SRC_PATTERN2.matcher(value).replaceAll("");
value = SINGLE_SCRIPT_PATTERN1.matcher(value).replaceAll("");
value = SINGLE_SCRIPT_PATTERN2.matcher(value).replaceAll("");
value = IMG_SCRIPT_PATTERN.matcher(value).replaceAll("");
value = EVAL_PATTERN.matcher(value).replaceAll("");
value = EXPRESSION_PATTERN.matcher(value).replaceAll("");
value = JS_PATTERN.matcher(value).replaceAll("");
value = VBS_PATTERN.matcher(value).replaceAll("");
value = ONLOAD_PATTERN.matcher(value).replaceAll("");
return value;
}
}
@@ -0,0 +1,108 @@
package cn.cloudwalk.web.xss.wrapper;
import cn.cloudwalk.web.xss.util.CustomXssUtil;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.servlet.ReadListener;
import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
public class XssHttpServletRequestWrapper extends HttpServletRequestWrapper {
private final String body;
public XssHttpServletRequestWrapper(HttpServletRequest request) throws IOException {
super(request);
if (request instanceof org.springframework.web.multipart.MultipartHttpServletRequest) {
this.body = null;
return;
}
StringBuilder stringBuilder = new StringBuilder();
BufferedReader bufferedReader = null;
try {
ServletInputStream servletInputStream = request.getInputStream();
if (servletInputStream != null) {
bufferedReader = new BufferedReader(new InputStreamReader((InputStream) servletInputStream));
char[] charBuffer = new char[1024];
int bytesRead = -1;
while ((bytesRead = bufferedReader.read(charBuffer)) > 0) {
stringBuilder.append(charBuffer, 0, bytesRead);
}
}
} catch (IOException ex) {
throw ex;
} finally {
if (bufferedReader != null) {
try {
bufferedReader.close();
} catch (IOException ex) {
throw ex;
}
}
}
this.body = CustomXssUtil.stripXSS(stringBuilder.toString());
}
public String getHeader(String name) {
String value = super.getHeader(name);
return CustomXssUtil.stripXSS(value);
}
public String getParameter(String name) {
String value = super.getParameter(name);
return CustomXssUtil.stripXSS(value);
}
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if (values == null) {
return null;
}
int count = values.length;
String[] encodedValues = new String[count];
for (int i = 0; i < count; i++) {
encodedValues[i] = CustomXssUtil.stripXSS(values[i]);
}
return encodedValues;
}
public ServletInputStream getInputStream() throws IOException {
HttpServletRequest request = (HttpServletRequest) getRequest();
if (request instanceof org.springframework.web.multipart.MultipartHttpServletRequest) {
return super.getInputStream();
}
final ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(this.body.getBytes());
ServletInputStream servletInputStream = new ServletInputStream() {
public int read() throws IOException {
return byteArrayInputStream.read();
}
public boolean isFinished() {
return false;
}
public boolean isReady() {
return false;
}
public void setReadListener(ReadListener readListener) {
}
};
return servletInputStream;
}
public BufferedReader getReader() throws IOException {
return new BufferedReader(new InputStreamReader((InputStream) getInputStream()));
}
public String getBody() {
return this.body;
}
}