Commit 98708e04 by mingjiexian

feat:增加archetype

parents
# Default ignored files
/shelf/
/workspace.xml
# Datasource local storage ignored files
/dataSources/
/dataSources.local.xml
# Editor-based HTTP Client requests
/httpRequests/
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="CompilerConfiguration">
<excludeFromCompile>
<directory url="file://$PROJECT_DIR$/src/main/resources/archetype-resources" includeSubdirectories="true" />
</excludeFromCompile>
<annotationProcessing>
<profile default="true" name="Default" enabled="true" />
<profile name="Maven default annotation processors profile" enabled="true">
<sourceOutputDir name="target/generated-sources/annotations" />
<sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
<outputRelativeToContentRoot value="true" />
<module name="bh-template-app-web-archetype" />
</profile>
</annotationProcessing>
<bytecodeTargetLevel target="8">
<module name="bh-template-app-web-archetype" target="1.5" />
</bytecodeTargetLevel>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="RemoteRepositoriesConfiguration">
<remote-repository>
<option name="id" value="maven-public" />
<option name="name" value="maven-public" />
<option name="url" value="http://maven.hikcreate.com/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Central Repository" />
<option name="url" value="http://maven.hikcreate.com/repository/maven-public/" />
</remote-repository>
<remote-repository>
<option name="id" value="central" />
<option name="name" value="Maven Central repository" />
<option name="url" value="https://repo1.maven.org/maven2" />
</remote-repository>
<remote-repository>
<option name="id" value="jboss.community" />
<option name="name" value="JBoss Community repository" />
<option name="url" value="https://repository.jboss.org/nexus/content/repositories/public/" />
</remote-repository>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="MavenProjectsManager">
<option name="originalFiles">
<list>
<option value="$PROJECT_DIR$/pom.xml" />
</list>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/bh-template-app-web-archetype.iml" filepath="$PROJECT_DIR$/bh-template-app-web-archetype.iml" />
</modules>
</component>
</project>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_5">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
<sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>
\ No newline at end of file
<?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>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>bh-template-app-web-archetype</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>maven-archetype</packaging>
<name>bh-template-app-web-archetype</name>
<build>
<extensions>
<extension>
<groupId>org.apache.maven.archetype</groupId>
<artifactId>archetype-packaging</artifactId>
<version>3.0.1</version>
</extension>
</extensions>
<pluginManagement>
<plugins>
<plugin>
<artifactId>maven-archetype-plugin</artifactId>
<version>3.0.1</version>
</plugin>
</plugins>
</pluginManagement>
</build>
<description>所有项目父pom文件</description>
<url>https://projects.spring.io/spring-boot/#/spring-boot-starter-parent/parent-pom/bh-template-app-web</url>
<developers>
<developer>
<name>Pivotal</name>
<email>info@pivotal.io</email>
<organization>Pivotal Software, Inc.</organization>
<organizationUrl>https://www.spring.io</organizationUrl>
</developer>
</developers>
<licenses>
<license>
<name>Apache License, Version 2.0</name>
<url>https://www.apache.org/licenses/LICENSE-2.0</url>
</license>
</licenses>
<scm>
<url>https://github.com/spring-projects/spring-boot/spring-boot-starter-parent/parent-pom/bh-template-app-web</url>
</scm>
<distributionManagement>
<repository>
<id>nexus</id>
<name>maven-releases</name>
<url>http://maven.hikcreate.com/repository/maven-releases</url>
</repository>
<snapshotRepository>
<id>nexus</id>
<name>maven-snapshots</name>
<url>http://maven.hikcreate.com/repository/maven-snapshots</url>
</snapshotRepository>
</distributionManagement>
</project>
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="bh-template-app-web"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modules>
<module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-domain" dir="__rootArtifactId__-domain" name="${rootArtifactId}-domain">
<fileSets>
<fileSet packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.xtx</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-infra" dir="__rootArtifactId__-infra" name="${rootArtifactId}-infra">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-domain</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author Administrator
*/
@SpringBootApplication(scanBasePackages = "com.hikcreate")
@EnableFeignClients(basePackages = "com.hikcreate")
@EnableEurekaClient
@EnableApolloConfig
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
/**
* @author Administrator
*/
@SpringBootConfiguration
public class CommonConfig {
@Value("${symbol_dollar}{sso.user.session.prefix:sso:user:session:}")
public String userSessionPrefix;
@Value("${symbol_dollar}{img.url.prefix:}")
public String imgUrlPrefix;
@Value("${symbol_dollar}{file.path.suffix:}")
public String filePath;
@Value("${symbol_dollar}{file.name.config:}")
public String fileName;
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import cn.hutool.json.JSONUtil;
import ${package}.infra.data.model.CommonConstant;
import com.hikcreate.infra.framework.core.Result;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @author Administrator
*/
@Slf4j
@Configuration
@Setter(onMethod = @__(@Autowired))
public class Interceptor implements HandlerInterceptor {
private RedisTemplate<String, String> redisTemplate;
private CommonConfig commonConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("***bh.student.app.web.Interceptor.preHandle***");
String token = request.getHeader(CommonConstant.TOKEN);
String uri = request.getRequestURI();
if (uri.contains(CommonConstant.SWAGGER) || uri.contains(CommonConstant.WEB_SERVER)) {
return true;
}
Result<Void> responseResult;
response.setHeader(CommonConstant.CONTENT_TYPE, CommonConstant.APPLICATION_JSON);
//redis中保存了用户信息 需要的话可以反序列化取值
if (StringUtils.isEmpty(token) || Boolean.FALSE.equals(redisTemplate.opsForHash().hasKey(commonConfig.userSessionPrefix + token, CommonConstant.TOKEN))) {
responseResult = new Result<>();
responseResult.setCode(CommonConstant.ERROR_CODE);
responseResult.setMessage(CommonConstant.LOGIN_EXPIRED);
PrintWriter pw = response.getWriter();
pw.write(JSONUtil.toJsonStr(responseResult));
pw.flush();
pw.close();
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView) {
//后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)
//对模型数据进行处理或对视图进行处理,modelAndView也可能为null
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
//整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,
//类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Administrator
*/
@Configuration
@EnableWebMvc
@Setter(onMethod = @__(@Autowired))
public class InterceptorConfig implements WebMvcConfigurer {
private final String[] notLoginInterceptPaths = {"/users/login",
"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**",
"/file/download", "/file/downloadTemplate"
};
private Interceptor interceptor;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
}
/**
* web层统一处理Long转String问题
*
* @param converters 需要转换的对象
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
SimpleModule simpleModule = new SimpleModule();
//将Long转为string 解决id过大 js显示问题
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
//放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public static class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "token,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
response.setHeader("Access-Control-Max-Age", "3600");
String options = "OPTIONS";
if (!options.equals(request.getMethod())) {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {
//
}
@Override
public void destroy() {
//
}
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.187:7070/
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://104.1.67.252:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.210:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.232:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
spring:
profiles:
active: dev
main:
allow-bean-definition-overriding: true
app:
id: business-hall
apollo:
autoUpdateInjectedSpringProperties: true
bootstrap:
enabled: true
namespaces: ${parentArtifactId},bh-eureka,bh-datasource-mysql,bh-redis,bh-fdfs
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">
<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../../log"/>
<property name="appName" value="${parentArtifactId}"/>
<contextName>${parentArtifactId}</contextName>
<!--格式化输出:
%d表示日期|%-5level:级别从左显示5个字符宽度%|appName:项目名,X-B3-TraceId: 一条链路唯一的ID, X-B3-SpanId 链路中每一环的ID, X-Span-Export:是否是发送给Zipkin|%thread表示线程名|ClassName|msg:日志消息,%n是换行符-->
<property name="log.pattern"
value="%cyan(%d)|%highlight(%level)|${symbol_dollar}{appName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%yellow(%thread)|%blue(%logger{36}:%line)|%msg%n"/>
<!--没有颜色-->
<property name="FILE_LOG_PATTERN"
value="%d|%level|${symbol_dollar}{moduleName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%thread|%logger{36}:%line|%msg%n"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>${symbol_dollar}{log.pattern}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${symbol_dollar}{logPath}/${symbol_dollar}{appName}.log</file>
<!-- 日志输出编码 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志输出文件名 -->
<fileNamePattern>${symbol_dollar}{logPath}/${symbol_dollar}{appName}.log.%d{yyyy-MM-dd}</fileNamePattern>
<!-- 日志保存的最大时间 -->
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<!-- 格式化输出 -->
<encoder>
<charset>UTF-8</charset>
<pattern>${symbol_dollar}{FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 在程序的开发测试阶段,可以调整level的级别,常用级别优先级为: -->
<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
<logger name="org.springframework.boot" level="WARN"/>
<springProfile name="dev">
<logger name="com.hikcreate.bh.student.app.web" level="info"/>
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="test">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="prod">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="ys">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
</configuration>
\ No newline at end of file
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-infra</artifactId>
</dependency>
</dependencies>
</project>
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
</project>
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.infra.data.feign;
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.infra.data.model;
/**
* @author Administrator
*/
public class CommonConstant {
private CommonConstant() {
}
/**
* token
*/
public static final String TOKEN = "token";
/**
* 登录过期,请重新登录
*/
public static final String LOGIN_EXPIRED = "登录过期,请重新登录";
/**
* 错误编号
*/
public static final String ERROR_CODE = "2001";
/**
* webServer
*/
public static final String WEB_SERVER = "webServer";
/**
* swagger
*/
public static final String SWAGGER = "swagger";
/**
* Content-Type
*/
public static final String CONTENT_TYPE = "Content-Type";
/**
* application/json;charset=UTF-8
*/
public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
/**
* header:Access-Control-Expose-Headers
*/
public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
/**
* header:filename
*/
public static final String FILE_NAME = "filename";
/**
* loginName
*/
public static final String LOGIN_NAME = "loginName";
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?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>com.hikcreate.infra</groupId>
<artifactId>parent-pom</artifactId>
<version>2.2.6-SNAPSHOT</version>
</parent>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>${rootArtifactId}-api</module>
<module>${rootArtifactId}-domain</module>
<module>${rootArtifactId}-infra</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>${rootArtifactId}-domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>${rootArtifactId}-infra</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<meminitial>512m</meminitial>
<maxmem>4096m</maxmem>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
</project>
#Mon Sep 06 11:12:01 CST 2021
package=it.pkg
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=basic
<?xml version="1.0" encoding="UTF-8"?>
<archetype-descriptor xsi:schemaLocation="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0 http://maven.apache.org/xsd/archetype-descriptor-1.0.0.xsd" name="bh-template-app-web"
xmlns="http://maven.apache.org/plugins/maven-archetype-plugin/archetype-descriptor/1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<modules>
<module id="${rootArtifactId}-api" dir="__rootArtifactId__-api" name="${rootArtifactId}-api">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
<fileSet filtered="true" encoding="UTF-8">
<directory>src/main/resources</directory>
<includes>
<include>**/*.xml</include>
<include>**/*.yml</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-domain" dir="__rootArtifactId__-domain" name="${rootArtifactId}-domain">
<fileSets>
<fileSet packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.xtx</include>
</includes>
</fileSet>
</fileSets>
</module>
<module id="${rootArtifactId}-infra" dir="__rootArtifactId__-infra" name="${rootArtifactId}-infra">
<fileSets>
<fileSet filtered="true" packaged="true" encoding="UTF-8">
<directory>src/main/java</directory>
<includes>
<include>**/*.java</include>
</includes>
</fileSet>
</fileSets>
</module>
</modules>
</archetype-descriptor>
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-domain</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author Administrator
*/
@SpringBootApplication(scanBasePackages = "com.hikcreate")
@EnableFeignClients(basePackages = "com.hikcreate")
@EnableEurekaClient
@EnableApolloConfig
public class Application {
public static void main(String[] args) {
SpringApplication.run(TemplateApplication.class, args);
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
/**
* @author Administrator
*/
@SpringBootConfiguration
public class CommonConfig {
@Value("${symbol_dollar}{sso.user.session.prefix:sso:user:session:}")
public String userSessionPrefix;
@Value("${symbol_dollar}{img.url.prefix:}")
public String imgUrlPrefix;
@Value("${symbol_dollar}{file.path.suffix:}")
public String filePath;
@Value("${symbol_dollar}{file.name.config:}")
public String fileName;
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import cn.hutool.json.JSONUtil;
import ${package}.infra.data.model.CommonConstant;
import com.hikcreate.infra.framework.core.Result;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @author Administrator
*/
@Slf4j
@Configuration
@Setter(onMethod = @__(@Autowired))
public class Interceptor implements HandlerInterceptor {
private RedisTemplate<String, String> redisTemplate;
private CommonConfig commonConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("***bh.student.app.web.Interceptor.preHandle***");
String token = request.getHeader(CommonConstant.TOKEN);
String uri = request.getRequestURI();
if (uri.contains(CommonConstant.SWAGGER) || uri.contains(CommonConstant.WEB_SERVER)) {
return true;
}
Result<Void> responseResult;
response.setHeader(CommonConstant.CONTENT_TYPE, CommonConstant.APPLICATION_JSON);
//redis中保存了用户信息 需要的话可以反序列化取值
if (StringUtils.isEmpty(token) || Boolean.FALSE.equals(redisTemplate.opsForHash().hasKey(commonConfig.userSessionPrefix + token, CommonConstant.TOKEN))) {
responseResult = new Result<>();
responseResult.setCode(CommonConstant.ERROR_CODE);
responseResult.setMessage(CommonConstant.LOGIN_EXPIRED);
PrintWriter pw = response.getWriter();
pw.write(JSONUtil.toJsonStr(responseResult));
pw.flush();
pw.close();
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView) {
//后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)
//对模型数据进行处理或对视图进行处理,modelAndView也可能为null
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
//整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,
//类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.api.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Administrator
*/
@Configuration
@EnableWebMvc
@Setter(onMethod = @__(@Autowired))
public class InterceptorConfig implements WebMvcConfigurer {
private final String[] notLoginInterceptPaths = {"/users/login",
"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**",
"/file/download", "/file/downloadTemplate"
};
private Interceptor interceptor;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
}
/**
* web层统一处理Long转String问题
*
* @param converters 需要转换的对象
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
SimpleModule simpleModule = new SimpleModule();
//将Long转为string 解决id过大 js显示问题
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
//放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public static class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "token,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
response.setHeader("Access-Control-Max-Age", "3600");
String options = "OPTIONS";
if (!options.equals(request.getMethod())) {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {
//
}
@Override
public void destroy() {
//
}
}
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.187:7070/
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://104.1.67.252:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.210:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
apollo:
meta: http://10.197.236.232:7070/
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
spring:
profiles:
active: dev
main:
allow-bean-definition-overriding: true
app:
id: business-hall
apollo:
autoUpdateInjectedSpringProperties: true
bootstrap:
enabled: true
namespaces: ${parentArtifactId},bh-eureka,bh-datasource-mysql,bh-redis,bh-fdfs
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">
<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../../log"/>
<property name="appName" value="${parentArtifactId}"/>
<contextName>${parentArtifactId}</contextName>
<!--格式化输出:
%d表示日期|%-5level:级别从左显示5个字符宽度%|appName:项目名,X-B3-TraceId: 一条链路唯一的ID, X-B3-SpanId 链路中每一环的ID, X-Span-Export:是否是发送给Zipkin|%thread表示线程名|ClassName|msg:日志消息,%n是换行符-->
<property name="log.pattern"
value="%cyan(%d)|%highlight(%level)|${symbol_dollar}{appName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%yellow(%thread)|%blue(%logger{36}:%line)|%msg%n"/>
<!--没有颜色-->
<property name="FILE_LOG_PATTERN"
value="%d|%level|${symbol_dollar}{moduleName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%thread|%logger{36}:%line|%msg%n"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>${symbol_dollar}{log.pattern}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${symbol_dollar}{logPath}/${symbol_dollar}{appName}.log</file>
<!-- 日志输出编码 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志输出文件名 -->
<fileNamePattern>${symbol_dollar}{logPath}/${symbol_dollar}{appName}.log.%d{yyyy-MM-dd}</fileNamePattern>
<!-- 日志保存的最大时间 -->
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<!-- 格式化输出 -->
<encoder>
<charset>UTF-8</charset>
<pattern>${symbol_dollar}{FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 在程序的开发测试阶段,可以调整level的级别,常用级别优先级为: -->
<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
<logger name="org.springframework.boot" level="WARN"/>
<springProfile name="dev">
<logger name="com.hikcreate.bh.student.app.web" level="info"/>
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="test">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="prod">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="ys">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
</configuration>
\ No newline at end of file
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>${groupId}</groupId>
<artifactId>${rootArtifactId}-infra</artifactId>
</dependency>
</dependencies>
</project>
<?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">
<parent>
<artifactId>${rootArtifactId}</artifactId>
<groupId>${groupId}</groupId>
<version>${version}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>${artifactId}</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
</project>
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.infra.data.feign;
\ No newline at end of file
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
package ${package}.infra.data.model;
/**
* @author Administrator
*/
public class CommonConstant {
private CommonConstant() {
}
/**
* token
*/
public static final String TOKEN = "token";
/**
* 登录过期,请重新登录
*/
public static final String LOGIN_EXPIRED = "登录过期,请重新登录";
/**
* 错误编号
*/
public static final String ERROR_CODE = "2001";
/**
* webServer
*/
public static final String WEB_SERVER = "webServer";
/**
* swagger
*/
public static final String SWAGGER = "swagger";
/**
* Content-Type
*/
public static final String CONTENT_TYPE = "Content-Type";
/**
* application/json;charset=UTF-8
*/
public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
/**
* header:Access-Control-Expose-Headers
*/
public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
/**
* header:filename
*/
public static final String FILE_NAME = "filename";
/**
* loginName
*/
public static final String LOGIN_NAME = "loginName";
}
#set( $symbol_pound = '#' )
#set( $symbol_dollar = '$' )
#set( $symbol_escape = '\' )
<?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>com.hikcreate.infra</groupId>
<artifactId>parent-pom</artifactId>
<version>2.2.6-SNAPSHOT</version>
</parent>
<groupId>${groupId}</groupId>
<artifactId>${artifactId}</artifactId>
<packaging>pom</packaging>
<version>${version}</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>${rootArtifactId}-api</module>
<module>${rootArtifactId}-domain</module>
<module>${rootArtifactId}-infra</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>${rootArtifactId}-domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>${rootArtifactId}-infra</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<meminitial>512m</meminitial>
<maxmem>4096m</maxmem>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
</project>
#Mon Sep 06 11:12:01 CST 2021
package=it.pkg
version=0.1-SNAPSHOT
groupId=archetype.it
artifactId=basic
<?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">
<parent>
<artifactId>basic</artifactId>
<groupId>archetype.it</groupId>
<version>0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>basic-api</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>com.ctrip.framework.apollo</groupId>
<artifactId>apollo-client</artifactId>
</dependency>
<dependency>
<groupId>archetype.it</groupId>
<artifactId>basic-domain</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<skip>false</skip>
</configuration>
</plugin>
</plugins>
</build>
</project>
package it.pkg.api;
import com.ctrip.framework.apollo.spring.annotation.EnableApolloConfig;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.openfeign.EnableFeignClients;
/**
* @author Administrator
*/
@SpringBootApplication(scanBasePackages = "com.hikcreate")
@EnableFeignClients(basePackages = "com.hikcreate")
@EnableEurekaClient
@EnableApolloConfig
public class Application {
public static void main(String[] args) {
SpringApplication.run(TemplateApplication.class, args);
}
}
package it.pkg.api.config;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringBootConfiguration;
/**
* @author Administrator
*/
@SpringBootConfiguration
public class CommonConfig {
@Value("${sso.user.session.prefix:sso:user:session:}")
public String userSessionPrefix;
@Value("${img.url.prefix:}")
public String imgUrlPrefix;
@Value("${file.path.suffix:}")
public String filePath;
@Value("${file.name.config:}")
public String fileName;
}
package it.pkg.api.config;
import cn.hutool.json.JSONUtil;
import it.pkg.infra.data.model.CommonConstant;
import com.hikcreate.infra.framework.core.Result;
import lombok.Setter;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
/**
* @author Administrator
*/
@Slf4j
@Configuration
@Setter(onMethod = @__(@Autowired))
public class Interceptor implements HandlerInterceptor {
private RedisTemplate<String, String> redisTemplate;
private CommonConfig commonConfig;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.info("***bh.student.app.web.Interceptor.preHandle***");
String token = request.getHeader(CommonConstant.TOKEN);
String uri = request.getRequestURI();
if (uri.contains(CommonConstant.SWAGGER) || uri.contains(CommonConstant.WEB_SERVER)) {
return true;
}
Result<Void> responseResult;
response.setHeader(CommonConstant.CONTENT_TYPE, CommonConstant.APPLICATION_JSON);
//redis中保存了用户信息 需要的话可以反序列化取值
if (StringUtils.isEmpty(token) || Boolean.FALSE.equals(redisTemplate.opsForHash().hasKey(commonConfig.userSessionPrefix + token, CommonConstant.TOKEN))) {
responseResult = new Result<>();
responseResult.setCode(CommonConstant.ERROR_CODE);
responseResult.setMessage(CommonConstant.LOGIN_EXPIRED);
PrintWriter pw = response.getWriter();
pw.write(JSONUtil.toJsonStr(responseResult));
pw.flush();
pw.close();
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object object, ModelAndView modelAndView) {
//后处理回调方法,实现处理器的后处理(但在渲染视图之前),此时我们可以通过modelAndView(模型和视图对象)
//对模型数据进行处理或对视图进行处理,modelAndView也可能为null
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object object, Exception exception) {
//整个请求处理完毕回调方法,即在视图渲染完毕时回调,如性能监控中我们可以在此记录结束时间并输出消耗时间,还可以进行一些资源清理,
//类似于try-catch-finally中的finally,但仅调用处理器执行链中preHandle返回true的拦截器的afterCompletion。
}
}
package it.pkg.api.config;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.module.SimpleModule;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.core.annotation.Order;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;
/**
* @author Administrator
*/
@Configuration
@EnableWebMvc
@Setter(onMethod = @__(@Autowired))
public class InterceptorConfig implements WebMvcConfigurer {
private final String[] notLoginInterceptPaths = {"/users/login",
"/swagger-resources/**", "/webjars/**", "/v2/**", "/swagger-ui.html/**",
"/file/download", "/file/downloadTemplate"
};
private Interceptor interceptor;
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
registry.addResourceHandler("/statics/**").addResourceLocations("classpath:/statics/");
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
registry.addResourceHandler("/**").addResourceLocations("classpath:/META-INF/resources/").setCachePeriod(0);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(notLoginInterceptPaths);
}
/**
* web层统一处理Long转String问题
*
* @param converters 需要转换的对象
*/
@Override
public void extendMessageConverters(List<HttpMessageConverter<?>> converters) {
MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
ObjectMapper objectMapper = jackson2HttpMessageConverter.getObjectMapper();
SimpleModule simpleModule = new SimpleModule();
//将Long转为string 解决id过大 js显示问题
simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
objectMapper.registerModule(simpleModule);
jackson2HttpMessageConverter.setObjectMapper(objectMapper);
//放到第一个
converters.add(0, jackson2HttpMessageConverter);
}
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public static class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "token,Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers");
response.setHeader("Access-Control-Max-Age", "3600");
String options = "OPTIONS";
if (!options.equals(request.getMethod())) {
chain.doFilter(req, res);
}
}
@Override
public void init(FilterConfig filterConfig) {
//
}
@Override
public void destroy() {
//
}
}
}
apollo:
meta: http://10.197.236.187:7070/
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
\ No newline at end of file
spring:
profiles:
active: dev
main:
allow-bean-definition-overriding: true
app:
id: business-hall
apollo:
autoUpdateInjectedSpringProperties: true
bootstrap:
enabled: true
namespaces: basic,bh-eureka,bh-datasource-mysql,bh-redis,bh-fdfs
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="5 seconds">
<springProperty scope="context" name="logPath" source="logging.path" defaultValue="../../log"/>
<property name="appName" value="basic"/>
<contextName>basic</contextName>
<!--格式化输出:
%d表示日期|%-5level:级别从左显示5个字符宽度%|appName:项目名,X-B3-TraceId: 一条链路唯一的ID, X-B3-SpanId 链路中每一环的ID, X-Span-Export:是否是发送给Zipkin|%thread表示线程名|ClassName|msg:日志消息,%n是换行符-->
<property name="log.pattern"
value="%cyan(%d)|%highlight(%level)|${appName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%yellow(%thread)|%blue(%logger{36}:%line)|%msg%n"/>
<!--没有颜色-->
<property name="FILE_LOG_PATTERN"
value="%d|%level|${moduleName},%X{X-B3-TraceId},%X{X-B3-SpanId},%X{X-Span-Export}|%thread|%logger{36}:%line|%msg%n"/>
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<charset>UTF-8</charset>
<pattern>${log.pattern}</pattern>
</encoder>
</appender>
<!-- 按照每天生成日志文件 -->
<appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>${logPath}/${appName}.log</file>
<!-- 日志输出编码 -->
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!-- 日志输出文件名 -->
<fileNamePattern>${logPath}/${appName}.log.%d{yyyy-MM-dd}</fileNamePattern>
<!-- 日志保存的最大时间 -->
<maxHistory>30</maxHistory>
<totalSizeCap>10GB</totalSizeCap>
</rollingPolicy>
<!-- 格式化输出 -->
<encoder>
<charset>UTF-8</charset>
<pattern>${FILE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<!-- 在程序的开发测试阶段,可以调整level的级别,常用级别优先级为: -->
<!-- TRACE < DEBUG < INFO < WARN < ERROR -->
<logger name="org.springframework.boot" level="WARN"/>
<springProfile name="dev">
<logger name="com.hikcreate.bh.student.app.web" level="info"/>
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="test">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="prod">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
<springProfile name="ys">
<logger name="root" level="INFO" additivity="false">
<appender-ref ref="console"/>
<appender-ref ref="rollingFile"/>
</logger>
</springProfile>
</configuration>
\ No newline at end of file
<?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">
<parent>
<artifactId>basic</artifactId>
<groupId>archetype.it</groupId>
<version>0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>basic-domain</artifactId>
<dependencies>
<dependency>
<groupId>archetype.it</groupId>
<artifactId>basic-infra</artifactId>
</dependency>
</dependencies>
</project>
<?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">
<parent>
<artifactId>basic</artifactId>
<groupId>archetype.it</groupId>
<version>0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>basic-infra</artifactId>
<dependencies>
<dependency>
<groupId>com.hikcreate.infra</groupId>
<artifactId>framework-core</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
</dependency>
<dependency>
<groupId>javax.validation</groupId>
<artifactId>validation-api</artifactId>
</dependency>
<dependency>
<groupId>com.github.tobato</groupId>
<artifactId>fastdfs-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.10.3</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>4.0.0</version>
</dependency>
</dependencies>
</project>
package it.pkg.infra.data.model;
/**
* @author Administrator
*/
public class CommonConstant {
private CommonConstant() {
}
/**
* token
*/
public static final String TOKEN = "token";
/**
* 登录过期,请重新登录
*/
public static final String LOGIN_EXPIRED = "登录过期,请重新登录";
/**
* 错误编号
*/
public static final String ERROR_CODE = "2001";
/**
* webServer
*/
public static final String WEB_SERVER = "webServer";
/**
* swagger
*/
public static final String SWAGGER = "swagger";
/**
* Content-Type
*/
public static final String CONTENT_TYPE = "Content-Type";
/**
* application/json;charset=UTF-8
*/
public static final String APPLICATION_JSON = "application/json;charset=UTF-8";
/**
* header:Access-Control-Expose-Headers
*/
public static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";
/**
* header:filename
*/
public static final String FILE_NAME = "filename";
/**
* loginName
*/
public static final String LOGIN_NAME = "loginName";
}
<?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>com.hikcreate.infra</groupId>
<artifactId>parent-pom</artifactId>
<version>2.2.6-SNAPSHOT</version>
</parent>
<groupId>archetype.it</groupId>
<artifactId>basic</artifactId>
<packaging>pom</packaging>
<version>0.1-SNAPSHOT</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<modules>
<module>basic-api</module>
<module>basic-domain</module>
<module>basic-infra</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>basic-domain</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.hikcreate.hdsp</groupId>
<artifactId>basic-infra</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
<meminitial>512m</meminitial>
<maxmem>4096m</maxmem>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-source-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>jar-no-fork</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.8.1</version>
</plugin>
</plugins>
</build>
</project>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment