mirror of
https://github.com/201206030/novel-plus.git
synced 2025-04-26 17:20:52 +00:00
build: Spring Boot 升级到 3.4.0
This commit is contained in:
parent
8d35aa80ab
commit
d77ce5b446
@ -71,11 +71,6 @@
|
|||||||
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
<artifactId>pagehelper-spring-boot-starter</artifactId>
|
||||||
<version>${pagehelper.version}</version>
|
<version>${pagehelper.version}</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
|
||||||
<groupId>com.cuisongliu</groupId>
|
|
||||||
<artifactId>orderbyhelper-spring-boot-starter</artifactId>
|
|
||||||
<version>${orderbyhelper.version}</version>
|
|
||||||
</dependency>
|
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.commons</groupId>
|
<groupId>org.apache.commons</groupId>
|
||||||
@ -84,15 +79,8 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<!--httpclient-->
|
<!--httpclient-->
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.apache.httpcomponents</groupId>
|
<groupId>org.apache.httpcomponents.client5</groupId>
|
||||||
<artifactId>httpclient</artifactId>
|
<artifactId>httpclient5</artifactId>
|
||||||
<version>4.5.14</version>
|
|
||||||
<exclusions>
|
|
||||||
<exclusion>
|
|
||||||
<groupId>commons-logging</groupId>
|
|
||||||
<artifactId>commons-logging</artifactId>
|
|
||||||
</exclusion>
|
|
||||||
</exclusions>
|
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
<dependency>
|
<dependency>
|
||||||
|
@ -5,7 +5,7 @@ import lombok.SneakyThrows;
|
|||||||
import lombok.experimental.UtilityClass;
|
import lombok.experimental.UtilityClass;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.codec.Charsets;
|
import org.apache.commons.codec.Charsets;
|
||||||
import org.apache.http.client.utils.DateUtils;
|
import org.apache.hc.client5.http.utils.DateUtils;
|
||||||
import org.springframework.core.io.Resource;
|
import org.springframework.core.io.Resource;
|
||||||
import org.springframework.http.HttpEntity;
|
import org.springframework.http.HttpEntity;
|
||||||
import org.springframework.http.HttpHeaders;
|
import org.springframework.http.HttpHeaders;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
package com.java2nb.novel.core.utils;
|
package com.java2nb.novel.core.utils;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
public class IpUtil {
|
public class IpUtil {
|
||||||
|
|
||||||
|
@ -3,21 +3,21 @@ package com.java2nb.novel.core.utils;
|
|||||||
import com.java2nb.novel.core.config.HttpProxyProperties;
|
import com.java2nb.novel.core.config.HttpProxyProperties;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.http.HttpHost;
|
import org.apache.hc.client5.http.auth.AuthScope;
|
||||||
import org.apache.http.auth.AuthScope;
|
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
|
||||||
import org.apache.http.auth.UsernamePasswordCredentials;
|
import org.apache.hc.client5.http.impl.auth.BasicCredentialsProvider;
|
||||||
import org.apache.http.client.CredentialsProvider;
|
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
|
||||||
import org.apache.http.config.Registry;
|
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
|
||||||
import org.apache.http.config.RegistryBuilder;
|
import org.apache.hc.client5.http.impl.classic.HttpClients;
|
||||||
import org.apache.http.conn.socket.ConnectionSocketFactory;
|
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
|
||||||
import org.apache.http.conn.socket.PlainConnectionSocketFactory;
|
import org.apache.hc.client5.http.socket.ConnectionSocketFactory;
|
||||||
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
|
import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory;
|
||||||
import org.apache.http.conn.ssl.TrustStrategy;
|
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
|
||||||
import org.apache.http.impl.client.BasicCredentialsProvider;
|
import org.apache.hc.core5.http.HttpHost;
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
import org.apache.hc.core5.http.config.Registry;
|
||||||
import org.apache.http.impl.client.HttpClientBuilder;
|
import org.apache.hc.core5.http.config.RegistryBuilder;
|
||||||
import org.apache.http.impl.client.HttpClients;
|
import org.apache.hc.core5.ssl.SSLContexts;
|
||||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
import org.apache.hc.core5.ssl.TrustStrategy;
|
||||||
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
import org.springframework.http.client.HttpComponentsClientHttpRequestFactory;
|
||||||
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.http.converter.HttpMessageConverter;
|
||||||
import org.springframework.http.converter.StringHttpMessageConverter;
|
import org.springframework.http.converter.StringHttpMessageConverter;
|
||||||
@ -45,7 +45,7 @@ public class RestTemplates {
|
|||||||
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
|
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
|
||||||
|
|
||||||
//忽略证书
|
//忽略证书
|
||||||
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
|
SSLContext sslContext = SSLContexts.custom()
|
||||||
.loadTrustMaterial(null, acceptingTrustStrategy)
|
.loadTrustMaterial(null, acceptingTrustStrategy)
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
@ -69,10 +69,10 @@ public class RestTemplates {
|
|||||||
if (StringUtils.isNotBlank(httpProxyProperties.getUsername()) && StringUtils.isNotBlank(
|
if (StringUtils.isNotBlank(httpProxyProperties.getUsername()) && StringUtils.isNotBlank(
|
||||||
httpProxyProperties.getPassword())) {
|
httpProxyProperties.getPassword())) {
|
||||||
// 创建CredentialsProvider实例并添加代理认证信息
|
// 创建CredentialsProvider实例并添加代理认证信息
|
||||||
CredentialsProvider provider = new BasicCredentialsProvider();
|
BasicCredentialsProvider provider = new BasicCredentialsProvider();
|
||||||
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(
|
UsernamePasswordCredentials credentials = new UsernamePasswordCredentials(
|
||||||
httpProxyProperties.getUsername(), httpProxyProperties.getPassword());
|
httpProxyProperties.getUsername(), httpProxyProperties.getPassword().toCharArray());
|
||||||
provider.setCredentials(AuthScope.ANY, credentials);
|
provider.setCredentials(new AuthScope(null, -1), credentials);
|
||||||
clientBuilder.setDefaultCredentialsProvider(provider);
|
clientBuilder.setDefaultCredentialsProvider(provider);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,37 @@
|
|||||||
|
package com.java2nb.novel.core.utils;
|
||||||
|
|
||||||
|
import org.springframework.context.ApplicationContext;
|
||||||
|
import org.springframework.context.ApplicationContextAware;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
@Component
|
||||||
|
public class SpringUtil implements ApplicationContextAware {
|
||||||
|
private static ApplicationContext applicationContext;
|
||||||
|
|
||||||
|
public SpringUtil() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setApplicationContext(ApplicationContext applicationContext) {
|
||||||
|
if (SpringUtil.applicationContext == null) {
|
||||||
|
SpringUtil.applicationContext = applicationContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ApplicationContext getApplicationContext() {
|
||||||
|
return applicationContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object getBean(String name) {
|
||||||
|
return getApplicationContext().getBean(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T getBean(Class<T> clazz) {
|
||||||
|
return (T)getApplicationContext().getBean(clazz);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static <T> T getBean(String name, Class<T> clazz) {
|
||||||
|
return (T)getApplicationContext().getBean(name, clazz);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -2,9 +2,9 @@ package com.java2nb.novel.entity;
|
|||||||
|
|
||||||
import io.github.xxyopen.web.valid.AddGroup;
|
import io.github.xxyopen.web.valid.AddGroup;
|
||||||
import io.github.xxyopen.web.valid.UpdateGroup;
|
import io.github.xxyopen.web.valid.UpdateGroup;
|
||||||
|
import jakarta.validation.constraints.*;
|
||||||
|
|
||||||
import javax.annotation.Generated;
|
import javax.annotation.Generated;
|
||||||
import javax.validation.constraints.*;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
public class User {
|
public class User {
|
||||||
|
@ -1,17 +1,18 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [ common ]
|
import: classpath:application-common.yml
|
||||||
main:
|
main:
|
||||||
allow-bean-definition-overriding: true
|
allow-bean-definition-overriding: true
|
||||||
#Redis服务器IP
|
#Redis服务器IP
|
||||||
redis:
|
data:
|
||||||
host: 127.0.0.1
|
redis:
|
||||||
#Redis服务器连接端口
|
host: 127.0.0.1
|
||||||
port: 6379
|
#Redis服务器连接端口
|
||||||
#Redis服务器连接密码
|
port: 6379
|
||||||
password: test123456
|
#Redis服务器连接密码
|
||||||
#连接超时时间(毫秒)
|
password: test123456
|
||||||
timeout: 10000
|
#连接超时时间(毫秒)
|
||||||
|
timeout: 10000
|
||||||
|
|
||||||
content:
|
content:
|
||||||
save:
|
save:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [ common ]
|
import: classpath:application-common.yml
|
||||||
main:
|
main:
|
||||||
allow-bean-definition-overriding: true
|
allow-bean-definition-overriding: true
|
||||||
#Redis服务器IP
|
#Redis服务器IP
|
||||||
|
@ -4,14 +4,15 @@ import lombok.RequiredArgsConstructor;
|
|||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
|
import org.springframework.security.config.Customizer;
|
||||||
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
|
||||||
import org.springframework.security.config.annotation.web.builders.WebSecurity;
|
|
||||||
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
|
||||||
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
|
|
||||||
import org.springframework.security.core.userdetails.User;
|
import org.springframework.security.core.userdetails.User;
|
||||||
|
import org.springframework.security.core.userdetails.UserDetails;
|
||||||
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
|
||||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||||
|
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
|
||||||
|
import org.springframework.security.web.SecurityFilterChain;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* SpringSecurity配置
|
* SpringSecurity配置
|
||||||
@ -21,7 +22,7 @@ import org.springframework.security.crypto.password.PasswordEncoder;
|
|||||||
@Configuration
|
@Configuration
|
||||||
@EnableWebSecurity
|
@EnableWebSecurity
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
|
public class SecurityConfiguration {
|
||||||
|
|
||||||
@Value("${admin.username}")
|
@Value("${admin.username}")
|
||||||
private String username;
|
private String username;
|
||||||
@ -29,39 +30,40 @@ public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
|
|||||||
@Value("${admin.password}")
|
@Value("${admin.password}")
|
||||||
private String password;
|
private String password;
|
||||||
|
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
public PasswordEncoder passwordEncoder() {
|
public PasswordEncoder passwordEncoder() {
|
||||||
return new BCryptPasswordEncoder();
|
return new BCryptPasswordEncoder();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
@Override
|
public InMemoryUserDetailsManager userDetailsService() {
|
||||||
public void configure(WebSecurity web) throws Exception {
|
UserDetails admin = User.builder()
|
||||||
super.configure(web);
|
.username(username)
|
||||||
|
.password(passwordEncoder().encode(password))
|
||||||
|
.roles("ADMIN")
|
||||||
|
.build();
|
||||||
|
return new InMemoryUserDetailsManager(admin);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Bean
|
||||||
public void configure(AuthenticationManagerBuilder auth) throws Exception {
|
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
|
||||||
|
http
|
||||||
|
.csrf(csrf -> csrf.disable()) // 禁用 CSRF
|
||||||
|
.authorizeHttpRequests(auth -> auth
|
||||||
|
.requestMatchers("/css/**", "/favicon.ico").permitAll() // 允许访问静态资源
|
||||||
|
.anyRequest().hasRole("ADMIN") // 其他请求需要 ADMIN 角色
|
||||||
|
)
|
||||||
|
.formLogin(form -> form
|
||||||
|
.loginPage("/login.html") // 自定义登录页面
|
||||||
|
.loginProcessingUrl("/login") // 登录处理 URL
|
||||||
|
.permitAll()
|
||||||
|
)
|
||||||
|
.logout(logout -> logout
|
||||||
|
.logoutUrl("/logout") // 登出 URL
|
||||||
|
.logoutSuccessUrl("/") // 登出成功后跳转的页面
|
||||||
|
)
|
||||||
|
.httpBasic(Customizer.withDefaults()); // 启用 HTTP Basic 认证
|
||||||
|
|
||||||
User.UserBuilder builder = User.builder().passwordEncoder(passwordEncoder()::encode);
|
return http.build();
|
||||||
auth.inMemoryAuthentication().withUser(builder.username(username).password(password).roles("ADMIN").build());
|
|
||||||
}
|
}
|
||||||
|
}
|
||||||
@Override
|
|
||||||
protected void configure(HttpSecurity http) throws Exception {
|
|
||||||
http.csrf().disable()
|
|
||||||
.authorizeRequests()
|
|
||||||
.antMatchers("/css/**").permitAll()
|
|
||||||
.antMatchers("/favicon.ico").permitAll()
|
|
||||||
.antMatchers("/**").hasRole("ADMIN")
|
|
||||||
.and().formLogin().loginPage("/login.html").loginProcessingUrl("/login").permitAll()
|
|
||||||
.and().logout()
|
|
||||||
.logoutUrl("/logout")
|
|
||||||
.logoutSuccessUrl("/")
|
|
||||||
.and().httpBasic();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
@ -10,6 +10,7 @@ import com.java2nb.novel.entity.CrawlSource;
|
|||||||
import com.java2nb.novel.service.BookService;
|
import com.java2nb.novel.service.BookService;
|
||||||
import com.java2nb.novel.service.CrawlService;
|
import com.java2nb.novel.service.CrawlService;
|
||||||
import com.java2nb.novel.utils.Constants;
|
import com.java2nb.novel.utils.Constants;
|
||||||
|
import jakarta.servlet.ServletContext;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.time.DateUtils;
|
import org.apache.commons.lang3.time.DateUtils;
|
||||||
@ -17,7 +18,6 @@ import org.springframework.beans.factory.annotation.Value;
|
|||||||
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -7,6 +7,7 @@ import com.java2nb.novel.core.cache.CacheService;
|
|||||||
import com.java2nb.novel.core.crawl.CrawlParser;
|
import com.java2nb.novel.core.crawl.CrawlParser;
|
||||||
import com.java2nb.novel.core.crawl.RuleBean;
|
import com.java2nb.novel.core.crawl.RuleBean;
|
||||||
import com.java2nb.novel.core.enums.ResponseStatus;
|
import com.java2nb.novel.core.enums.ResponseStatus;
|
||||||
|
import com.java2nb.novel.core.utils.SpringUtil;
|
||||||
import com.java2nb.novel.entity.Book;
|
import com.java2nb.novel.entity.Book;
|
||||||
import com.java2nb.novel.entity.CrawlSingleTask;
|
import com.java2nb.novel.entity.CrawlSingleTask;
|
||||||
import com.java2nb.novel.entity.CrawlSource;
|
import com.java2nb.novel.entity.CrawlSource;
|
||||||
@ -25,7 +26,6 @@ import io.github.xxyopen.util.IdWorker;
|
|||||||
import io.github.xxyopen.util.ThreadUtil;
|
import io.github.xxyopen.util.ThreadUtil;
|
||||||
import io.github.xxyopen.web.exception.BusinessException;
|
import io.github.xxyopen.web.exception.BusinessException;
|
||||||
import io.github.xxyopen.web.util.BeanUtil;
|
import io.github.xxyopen.web.util.BeanUtil;
|
||||||
import io.github.xxyopen.web.util.SpringUtil;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [common-dev]
|
import: classpath:application-common-dev.yml
|
@ -1,3 +1,3 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [common-prod]
|
import: classpath:application-common-prod.yml
|
@ -8,9 +8,7 @@ server:
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
profiles:
|
||||||
active: dev
|
active: dev
|
||||||
config:
|
|
||||||
use-legacy-processing: true
|
|
||||||
|
|
||||||
#登录用户名密码
|
#登录用户名密码
|
||||||
admin:
|
admin:
|
||||||
username: admin
|
username: admin
|
||||||
|
@ -12,9 +12,6 @@
|
|||||||
<!-- ConsoleAppender:把日志输出到控制台 -->
|
<!-- ConsoleAppender:把日志输出到控制台 -->
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<!--
|
|
||||||
<pattern>%d %p (%file:%line\)- %m%n</pattern>
|
|
||||||
-->
|
|
||||||
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
||||||
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
@ -22,43 +19,43 @@
|
|||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
|
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
|
||||||
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
|
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是novel-crawl.log -->
|
||||||
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名 -->
|
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过10MB时,对当前日志进行分割 重命名 -->
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<!-- 设置日志文件路径 -->
|
||||||
<File>logs/novel-crawl.log</File>
|
<file>logs/novel-crawl.log</file>
|
||||||
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
|
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
|
||||||
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
|
<!-- SizeAndTimeBasedRollingPolicy:基于时间和文件大小的滚动策略 -->
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
||||||
<!-- 文件名:logs/demo.2017-12-05.0.log -->
|
<!-- 文件名:logs/debug.2023-10-01.0.log -->
|
||||||
<fileNamePattern>logs/debug.%d.%i.log</fileNamePattern>
|
<fileNamePattern>logs/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||||
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
|
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
|
||||||
<maxHistory>30</maxHistory>
|
<maxHistory>30</maxHistory>
|
||||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
<!-- 单个日志文件的最大大小 -->
|
||||||
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
|
<maxFileSize>10MB</maxFileSize>
|
||||||
<maxFileSize>10MB</maxFileSize>
|
<!-- 所有日志文件的总大小限制 -->
|
||||||
</timeBasedFileNamingAndTriggeringPolicy>
|
<totalSizeCap>1GB</totalSizeCap>
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<!-- pattern节点,用来设置日志的输入格式 -->
|
<!-- pattern节点,用来设置日志的输入格式 -->
|
||||||
<pattern>
|
<pattern>%d %p (%file:%line\)- %m%n</pattern>
|
||||||
%d %p (%file:%line\)- %m%n
|
|
||||||
</pattern>
|
|
||||||
<!-- 记录日志的编码:此处设置字符集 - -->
|
<!-- 记录日志的编码:此处设置字符集 - -->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!-- 控制台输出日志级别 -->
|
<!-- 控制台输出日志级别 -->
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
<appender-ref ref="FILE" />
|
<appender-ref ref="FILE" />
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
|
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
|
||||||
<!-- com.maijinjie.springboot 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
|
<!-- com.java2nb 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
|
||||||
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
|
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
|
||||||
<logger name="com.java2nb" level="DEBUG" additivity="false">
|
<logger name="com.java2nb" level="DEBUG" additivity="false">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
<appender-ref ref="FILE" />
|
<appender-ref ref="FILE" />
|
||||||
</logger>
|
</logger>
|
||||||
</configuration>
|
</configuration>
|
@ -12,11 +12,11 @@ import com.java2nb.novel.entity.AuthorIncomeDetail;
|
|||||||
import com.java2nb.novel.entity.Book;
|
import com.java2nb.novel.entity.Book;
|
||||||
import com.java2nb.novel.service.AuthorService;
|
import com.java2nb.novel.service.AuthorService;
|
||||||
import com.java2nb.novel.service.BookService;
|
import com.java2nb.novel.service.BookService;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -54,7 +54,7 @@ public class AuthorController extends BaseController{
|
|||||||
* 发布小说
|
* 发布小说
|
||||||
* */
|
* */
|
||||||
@PostMapping("addBook")
|
@PostMapping("addBook")
|
||||||
public RestResult<Void> addBook(@RequestParam("bookDesc") String bookDesc,Book book,HttpServletRequest request){
|
public RestResult<Void> addBook(@RequestParam("bookDesc") String bookDesc, Book book, HttpServletRequest request){
|
||||||
|
|
||||||
Author author = checkAuthor(request);
|
Author author = checkAuthor(request);
|
||||||
|
|
||||||
|
@ -3,11 +3,10 @@ package com.java2nb.novel.controller;
|
|||||||
import com.java2nb.novel.core.bean.UserDetails;
|
import com.java2nb.novel.core.bean.UserDetails;
|
||||||
import com.java2nb.novel.core.utils.CookieUtil;
|
import com.java2nb.novel.core.utils.CookieUtil;
|
||||||
import com.java2nb.novel.core.utils.JwtTokenUtil;
|
import com.java2nb.novel.core.utils.JwtTokenUtil;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author 11797
|
* @author 11797
|
||||||
|
@ -15,11 +15,11 @@ import com.java2nb.novel.vo.BookVO;
|
|||||||
import io.github.xxyopen.model.page.PageBean;
|
import io.github.xxyopen.model.page.PageBean;
|
||||||
import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder;
|
import io.github.xxyopen.model.page.builder.pagehelper.PageBuilder;
|
||||||
import io.github.xxyopen.model.resp.RestResult;
|
import io.github.xxyopen.model.resp.RestResult;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
@ -10,6 +10,8 @@ import com.java2nb.novel.core.utils.RandomValidateCodeUtil;
|
|||||||
import io.github.xxyopen.model.resp.RestResult;
|
import io.github.xxyopen.model.resp.RestResult;
|
||||||
import io.github.xxyopen.util.UUIDUtil;
|
import io.github.xxyopen.util.UUIDUtil;
|
||||||
import io.github.xxyopen.web.exception.BusinessException;
|
import io.github.xxyopen.web.exception.BusinessException;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -19,8 +21,6 @@ import org.springframework.stereotype.Controller;
|
|||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
|
@ -12,6 +12,8 @@ import com.java2nb.novel.core.bean.UserDetails;
|
|||||||
import com.java2nb.novel.core.config.AlipayProperties;
|
import com.java2nb.novel.core.config.AlipayProperties;
|
||||||
import com.java2nb.novel.core.utils.ThreadLocalUtil;
|
import com.java2nb.novel.core.utils.ThreadLocalUtil;
|
||||||
import com.java2nb.novel.service.OrderService;
|
import com.java2nb.novel.service.OrderService;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -19,8 +21,6 @@ import org.springframework.stereotype.Controller;
|
|||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletResponse;
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
@ -13,13 +13,13 @@ import com.java2nb.novel.service.UserService;
|
|||||||
import io.github.xxyopen.model.resp.RestResult;
|
import io.github.xxyopen.model.resp.RestResult;
|
||||||
import io.github.xxyopen.web.valid.AddGroup;
|
import io.github.xxyopen.web.valid.AddGroup;
|
||||||
import io.github.xxyopen.web.valid.UpdateGroup;
|
import io.github.xxyopen.web.valid.UpdateGroup;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ import com.java2nb.novel.service.*;
|
|||||||
import com.java2nb.novel.vo.BookCommentVO;
|
import com.java2nb.novel.vo.BookCommentVO;
|
||||||
import com.java2nb.novel.vo.BookSettingVO;
|
import com.java2nb.novel.vo.BookSettingVO;
|
||||||
import io.github.xxyopen.model.page.PageBean;
|
import io.github.xxyopen.model.page.PageBean;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
@ -17,7 +18,6 @@ import org.springframework.ui.Model;
|
|||||||
import org.springframework.web.bind.annotation.PathVariable;
|
import org.springframework.web.bind.annotation.PathVariable;
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
|
@ -2,13 +2,13 @@ package com.java2nb.novel.core.config;
|
|||||||
|
|
||||||
import com.java2nb.novel.core.filter.NovelFilter;
|
import com.java2nb.novel.core.filter.NovelFilter;
|
||||||
import com.java2nb.novel.core.filter.XssFilter;
|
import com.java2nb.novel.core.filter.XssFilter;
|
||||||
|
import jakarta.servlet.DispatcherType;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
import org.springframework.boot.web.servlet.FilterRegistrationBean;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
import javax.servlet.DispatcherType;
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
@ -3,13 +3,13 @@ package com.java2nb.novel.core.config;
|
|||||||
import com.java2nb.novel.core.converter.DateConverter;
|
import com.java2nb.novel.core.converter.DateConverter;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.format.FormatterRegistry;
|
import org.springframework.format.FormatterRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author xiongxiaoyang
|
* @author xiongxiaoyang
|
||||||
*/
|
*/
|
||||||
@Configuration
|
@Configuration
|
||||||
public class WebMvcConfig extends WebMvcConfigurerAdapter {
|
public class WebMvcConfig implements WebMvcConfigurer {
|
||||||
@Override
|
@Override
|
||||||
public void addFormatters(FormatterRegistry registry) {
|
public void addFormatters(FormatterRegistry registry) {
|
||||||
registry.addConverter(new DateConverter());
|
registry.addConverter(new DateConverter());
|
||||||
|
@ -4,13 +4,14 @@ import com.java2nb.novel.core.cache.CacheKey;
|
|||||||
import com.java2nb.novel.core.cache.CacheService;
|
import com.java2nb.novel.core.cache.CacheService;
|
||||||
import com.java2nb.novel.core.utils.*;
|
import com.java2nb.novel.core.utils.*;
|
||||||
import io.github.xxyopen.util.UUIDUtil;
|
import io.github.xxyopen.util.UUIDUtil;
|
||||||
import io.github.xxyopen.web.util.SpringUtil;
|
import jakarta.servlet.*;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import javax.servlet.*;
|
import java.io.FileInputStream;
|
||||||
import javax.servlet.http.Cookie;
|
import java.io.IOException;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import java.io.InputStream;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import java.io.OutputStream;
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 项目核心过滤器
|
* 项目核心过滤器
|
||||||
|
@ -1,11 +1,11 @@
|
|||||||
package com.java2nb.novel.core.filter;
|
package com.java2nb.novel.core.filter;
|
||||||
|
|
||||||
import com.java2nb.novel.core.wrapper.XssHttpServletRequestWrapper;
|
import com.java2nb.novel.core.wrapper.XssHttpServletRequestWrapper;
|
||||||
|
import jakarta.servlet.*;
|
||||||
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import lombok.SneakyThrows;
|
import lombok.SneakyThrows;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
|
|
||||||
import javax.servlet.*;
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -3,12 +3,12 @@ package com.java2nb.novel.core.listener;
|
|||||||
import com.java2nb.novel.core.config.WebsiteProperties;
|
import com.java2nb.novel.core.config.WebsiteProperties;
|
||||||
import com.java2nb.novel.entity.WebsiteInfo;
|
import com.java2nb.novel.entity.WebsiteInfo;
|
||||||
import com.java2nb.novel.mapper.WebsiteInfoMapper;
|
import com.java2nb.novel.mapper.WebsiteInfoMapper;
|
||||||
|
import jakarta.servlet.ServletContext;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
import org.springframework.boot.web.servlet.ServletContextInitializer;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
import javax.servlet.ServletContext;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 启动监听器
|
* 启动监听器
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.java2nb.novel.core.utils;
|
package com.java2nb.novel.core.utils;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
|
||||||
public class BrowserUtil {
|
public class BrowserUtil {
|
||||||
|
@ -1,15 +1,15 @@
|
|||||||
package com.java2nb.novel.core.utils;
|
package com.java2nb.novel.core.utils;
|
||||||
|
|
||||||
import javax.servlet.http.Cookie;
|
import jakarta.servlet.http.Cookie;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import jakarta.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author Administrator
|
* @author Administrator
|
||||||
*/
|
*/
|
||||||
public class CookieUtil {
|
public class CookieUtil {
|
||||||
|
|
||||||
public static String getCookie(HttpServletRequest request,String key){
|
public static String getCookie(HttpServletRequest request, String key){
|
||||||
Cookie[] cookies = request.getCookies();
|
Cookie[] cookies = request.getCookies();
|
||||||
if(cookies != null) {
|
if(cookies != null) {
|
||||||
for (Cookie cookie : cookies) {
|
for (Cookie cookie : cookies) {
|
||||||
|
@ -2,7 +2,6 @@ package com.java2nb.novel.core.utils;
|
|||||||
|
|
||||||
import com.java2nb.novel.core.cache.CacheKey;
|
import com.java2nb.novel.core.cache.CacheKey;
|
||||||
import com.java2nb.novel.core.cache.CacheService;
|
import com.java2nb.novel.core.cache.CacheService;
|
||||||
import io.github.xxyopen.web.util.SpringUtil;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 模板操作工具类
|
* 模板操作工具类
|
||||||
|
@ -1,11 +1,7 @@
|
|||||||
package com.java2nb.novel.core.wrapper;
|
package com.java2nb.novel.core.wrapper;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import jakarta.servlet.http.HttpServletRequest;
|
||||||
|
import jakarta.servlet.http.HttpServletRequestWrapper;
|
||||||
import javax.servlet.http.HttpServletRequest;
|
|
||||||
import javax.servlet.http.HttpServletRequestWrapper;
|
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* XSS过滤处理
|
* XSS过滤处理
|
||||||
|
@ -29,19 +29,16 @@ import lombok.extern.slf4j.Slf4j;
|
|||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.mybatis.dynamic.sql.SortSpecification;
|
import org.mybatis.dynamic.sql.SortSpecification;
|
||||||
import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
||||||
|
import org.mybatis.dynamic.sql.select.QueryExpressionDSL;
|
||||||
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
|
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.beans.factory.annotation.Value;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
import tk.mybatis.orderbyhelper.OrderByHelper;
|
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.math.RoundingMode;
|
import java.math.RoundingMode;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static com.java2nb.novel.mapper.BookCategoryDynamicSqlSupport.bookCategory;
|
import static com.java2nb.novel.mapper.BookCategoryDynamicSqlSupport.bookCategory;
|
||||||
@ -201,9 +198,6 @@ public class BookServiceImpl implements BookService {
|
|||||||
|
|
||||||
PageHelper.startPage(page, pageSize);
|
PageHelper.startPage(page, pageSize);
|
||||||
|
|
||||||
if (StringUtils.isNotBlank(params.getSort())) {
|
|
||||||
OrderByHelper.orderBy(params.getSort() + " desc");
|
|
||||||
}
|
|
||||||
return PageBuilder.build(bookMapper.searchByPage(params));
|
return PageBuilder.build(bookMapper.searchByPage(params));
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -231,23 +225,22 @@ public class BookServiceImpl implements BookService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<BookIndex> queryIndexList(Long bookId, String orderBy, Integer page, Integer pageSize) {
|
public List<BookIndex> queryIndexList(Long bookId, String orderBy, Integer page, Integer pageSize) {
|
||||||
if (StringUtils.isNotBlank(orderBy)) {
|
|
||||||
OrderByHelper.orderBy(orderBy);
|
|
||||||
}
|
|
||||||
if (page != null && pageSize != null) {
|
if (page != null && pageSize != null) {
|
||||||
PageHelper.startPage(page, pageSize);
|
PageHelper.startPage(page, pageSize);
|
||||||
}
|
}
|
||||||
|
QueryExpressionDSL<org.mybatis.dynamic.sql.select.SelectModel>.QueryExpressionWhereBuilder where = select(
|
||||||
SelectStatementProvider selectStatement = select(BookIndexDynamicSqlSupport.id,
|
BookIndexDynamicSqlSupport.id,
|
||||||
BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum,
|
BookIndexDynamicSqlSupport.bookId, BookIndexDynamicSqlSupport.indexNum,
|
||||||
BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime,
|
BookIndexDynamicSqlSupport.indexName, BookIndexDynamicSqlSupport.updateTime,
|
||||||
BookIndexDynamicSqlSupport.isVip)
|
BookIndexDynamicSqlSupport.isVip)
|
||||||
.from(bookIndex)
|
.from(bookIndex)
|
||||||
.where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId))
|
.where(BookIndexDynamicSqlSupport.bookId, isEqualTo(bookId));
|
||||||
|
if("index_num desc".equals(orderBy)){
|
||||||
|
where.orderBy(BookIndexDynamicSqlSupport.indexNum.descending());
|
||||||
|
}
|
||||||
|
return bookIndexMapper.selectMany(where
|
||||||
.build()
|
.build()
|
||||||
.render(RenderingStrategies.MYBATIS3);
|
.render(RenderingStrategies.MYBATIS3));
|
||||||
|
|
||||||
return bookIndexMapper.selectMany(selectStatement);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -384,7 +377,6 @@ public class BookServiceImpl implements BookService {
|
|||||||
@Override
|
@Override
|
||||||
public PageBean<BookCommentVO> listCommentByPage(Long userId, Long bookId, int page, int pageSize) {
|
public PageBean<BookCommentVO> listCommentByPage(Long userId, Long bookId, int page, int pageSize) {
|
||||||
PageHelper.startPage(page, pageSize);
|
PageHelper.startPage(page, pageSize);
|
||||||
OrderByHelper.orderBy("t1.create_time desc");
|
|
||||||
return PageBuilder.build(bookCommentMapper.listCommentByPage(userId, bookId));
|
return PageBuilder.build(bookCommentMapper.listCommentByPage(userId, bookId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -6,7 +6,6 @@ import com.java2nb.novel.core.serialize.CommentUserNameSerialize;
|
|||||||
import com.java2nb.novel.entity.BookComment;
|
import com.java2nb.novel.entity.BookComment;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
import javax.annotation.Generated;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [ common-dev ]
|
import: classpath:application-common-dev.yml
|
||||||
|
|
||||||
|
|
||||||
pic:
|
pic:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
spring:
|
spring:
|
||||||
profiles:
|
config:
|
||||||
include: [ common-prod ]
|
import: classpath:application-common-prod.yml
|
||||||
|
|
||||||
#静态文件路径配置
|
#静态文件路径配置
|
||||||
resources:
|
resources:
|
||||||
|
@ -12,9 +12,6 @@
|
|||||||
<!-- ConsoleAppender:把日志输出到控制台 -->
|
<!-- ConsoleAppender:把日志输出到控制台 -->
|
||||||
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
|
||||||
<encoder>
|
<encoder>
|
||||||
<!--
|
|
||||||
<pattern>%d %p (%file:%line\)- %m%n</pattern>
|
|
||||||
-->
|
|
||||||
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
|
||||||
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
<!-- 控制台也要使用UTF-8,不要使用GBK,否则会中文乱码 -->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
@ -22,43 +19,43 @@
|
|||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
|
<!-- RollingFileAppender:滚动记录文件,先将日志记录到指定文件,当符合某个条件时,将日志记录到其他文件 -->
|
||||||
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是demo.log -->
|
<!-- 以下的大概意思是:1.先按日期存日志,日期变了,将前一天的日志文件名重命名为XXX%日期%索引,新的日志仍然是novel-front.log -->
|
||||||
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过1KB时,对当前日志进行分割 重命名 -->
|
<!-- 2.如果日期没有发生变化,但是当前日志的文件大小超过10MB时,对当前日志进行分割 重命名 -->
|
||||||
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
|
||||||
|
<!-- 设置日志文件路径 -->
|
||||||
<File>logs/novel-front.log</File>
|
<file>logs/novel-front.log</file>
|
||||||
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
|
<!-- rollingPolicy:当发生滚动时,决定 RollingFileAppender 的行为,涉及文件移动和重命名。 -->
|
||||||
<!-- TimeBasedRollingPolicy: 最常用的滚动策略,它根据时间来制定滚动策略,既负责滚动也负责出发滚动 -->
|
<!-- SizeAndTimeBasedRollingPolicy:基于时间和文件大小的滚动策略 -->
|
||||||
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
|
<rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
|
||||||
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
<!-- 活动文件的名字会根据fileNamePattern的值,每隔一段时间改变一次 -->
|
||||||
<!-- 文件名:logs/demo.2017-12-05.0.log -->
|
<!-- 文件名:logs/debug.2023-10-01.0.log -->
|
||||||
<fileNamePattern>logs/debug.%d.%i.log</fileNamePattern>
|
<fileNamePattern>logs/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
|
||||||
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
|
<!-- 每产生一个日志文件,该日志文件的保存期限为30天 -->
|
||||||
<maxHistory>30</maxHistory>
|
<maxHistory>30</maxHistory>
|
||||||
<timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
|
<!-- 单个日志文件的最大大小 -->
|
||||||
<!-- maxFileSize:这是活动文件的大小,默认值是10MB,测试时可改成1KB看效果 -->
|
<maxFileSize>10MB</maxFileSize>
|
||||||
<maxFileSize>10MB</maxFileSize>
|
<!-- 所有日志文件的总大小限制 -->
|
||||||
</timeBasedFileNamingAndTriggeringPolicy>
|
<totalSizeCap>1GB</totalSizeCap>
|
||||||
</rollingPolicy>
|
</rollingPolicy>
|
||||||
<encoder>
|
<encoder>
|
||||||
<!-- pattern节点,用来设置日志的输入格式 -->
|
<!-- pattern节点,用来设置日志的输入格式 -->
|
||||||
<pattern>
|
<pattern>%d %p (%file:%line\)- %m%n</pattern>
|
||||||
%d %p (%file:%line\)- %m%n
|
|
||||||
</pattern>
|
|
||||||
<!-- 记录日志的编码:此处设置字符集 - -->
|
<!-- 记录日志的编码:此处设置字符集 - -->
|
||||||
<charset>UTF-8</charset>
|
<charset>UTF-8</charset>
|
||||||
</encoder>
|
</encoder>
|
||||||
</appender>
|
</appender>
|
||||||
|
|
||||||
<!-- 控制台输出日志级别 -->
|
<!-- 控制台输出日志级别 -->
|
||||||
<root level="INFO">
|
<root level="INFO">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
<appender-ref ref="FILE" />
|
<appender-ref ref="FILE" />
|
||||||
</root>
|
</root>
|
||||||
|
|
||||||
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
|
<!-- 指定项目中某个包,当有日志操作行为时的日志记录级别 -->
|
||||||
<!-- com.maijinjie.springboot 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
|
<!-- com.java2nb 为根包,也就是只要是发生在这个根包下面的所有日志操作行为的权限都是DEBUG -->
|
||||||
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
|
<!-- 级别依次为【从高到低】:FATAL > ERROR > WARN > INFO > DEBUG > TRACE -->
|
||||||
<logger name="com.java2nb" level="DEBUG" additivity="false">
|
<logger name="com.java2nb" level="DEBUG" additivity="false">
|
||||||
<appender-ref ref="STDOUT" />
|
<appender-ref ref="STDOUT" />
|
||||||
<appender-ref ref="FILE" />
|
<appender-ref ref="FILE" />
|
||||||
</logger>
|
</logger>
|
||||||
</configuration>
|
</configuration>
|
@ -14,7 +14,7 @@
|
|||||||
and t1.create_user_id = #{userId}
|
and t1.create_user_id = #{userId}
|
||||||
</if>
|
</if>
|
||||||
</trim>
|
</trim>
|
||||||
|
order by t1.create_time desc
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
@ -31,6 +31,9 @@
|
|||||||
<if test="updateTimeMin != null">
|
<if test="updateTimeMin != null">
|
||||||
and last_index_update_time >= #{updateTimeMin}
|
and last_index_update_time >= #{updateTimeMin}
|
||||||
</if>
|
</if>
|
||||||
|
<if test="sort != null">
|
||||||
|
order by ${sort} desc
|
||||||
|
</if>
|
||||||
|
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
|
7
pom.xml
7
pom.xml
@ -20,7 +20,7 @@
|
|||||||
<parent>
|
<parent>
|
||||||
<groupId>org.springframework.boot</groupId>
|
<groupId>org.springframework.boot</groupId>
|
||||||
<artifactId>spring-boot-starter-parent</artifactId>
|
<artifactId>spring-boot-starter-parent</artifactId>
|
||||||
<version>2.7.18</version>
|
<version>3.4.0</version>
|
||||||
<relativePath/>
|
<relativePath/>
|
||||||
</parent>
|
</parent>
|
||||||
|
|
||||||
@ -30,11 +30,10 @@
|
|||||||
<java.version>21</java.version>
|
<java.version>21</java.version>
|
||||||
<maven.test.skip>true</maven.test.skip>
|
<maven.test.skip>true</maven.test.skip>
|
||||||
<mysql.version>8.0.29</mysql.version>
|
<mysql.version>8.0.29</mysql.version>
|
||||||
<mybatis.version>2.1.4</mybatis.version>
|
<mybatis.version>3.0.4</mybatis.version>
|
||||||
<mybatis-generator.version>1.4.0</mybatis-generator.version>
|
<mybatis-generator.version>1.4.0</mybatis-generator.version>
|
||||||
<mybatis-dynamic-sql.version>1.1.4</mybatis-dynamic-sql.version>
|
<mybatis-dynamic-sql.version>1.5.0</mybatis-dynamic-sql.version>
|
||||||
<pagehelper.version>1.4.6</pagehelper.version>
|
<pagehelper.version>1.4.6</pagehelper.version>
|
||||||
<orderbyhelper.version>1.0.2</orderbyhelper.version>
|
|
||||||
<commons-lang3.version>3.4</commons-lang3.version>
|
<commons-lang3.version>3.4</commons-lang3.version>
|
||||||
<jjwt.version>0.9.1</jjwt.version>
|
<jjwt.version>0.9.1</jjwt.version>
|
||||||
<jest.version>6.3.1</jest.version>
|
<jest.version>6.3.1</jest.version>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user