Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
D
deprecated-tabulator
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Packages
Packages
List
Container Registry
Analytics
Analytics
CI / CD
Code Review
Insights
Issues
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
MyCard
deprecated-tabulator
Commits
3972e891
Commit
3972e891
authored
May 31, 2022
by
月兔回旋于空中
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
结构 >> 提交补充
parent
f7760bb4
Pipeline
#13327
passed with stages
in 3 minutes and 34 seconds
Changes
10
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
206 additions
and
45 deletions
+206
-45
build.gradle
build.gradle
+1
-5
src/main/java/moe/mycard/tabulator/common/LoginInterceptor.java
...in/java/moe/mycard/tabulator/common/LoginInterceptor.java
+64
-9
src/main/java/moe/mycard/tabulator/common/MvcConfigurer.java
src/main/java/moe/mycard/tabulator/common/MvcConfigurer.java
+31
-0
src/main/java/moe/mycard/tabulator/exception/GlobalExceptionProcessor.java
.../mycard/tabulator/exception/GlobalExceptionProcessor.java
+28
-25
src/main/java/moe/mycard/tabulator/model/epi/MyCardEPI.java
src/main/java/moe/mycard/tabulator/model/epi/MyCardEPI.java
+22
-0
src/main/java/moe/mycard/tabulator/model/epi/ResponseEPI.java
...main/java/moe/mycard/tabulator/model/epi/ResponseEPI.java
+14
-0
src/main/java/moe/mycard/tabulator/redis/Auth_RedisKey.java
src/main/java/moe/mycard/tabulator/redis/Auth_RedisKey.java
+8
-0
src/main/java/moe/mycard/tabulator/redis/RedisKey.java
src/main/java/moe/mycard/tabulator/redis/RedisKey.java
+8
-0
src/main/java/moe/mycard/tabulator/tool/UtilEPI.java
src/main/java/moe/mycard/tabulator/tool/UtilEPI.java
+21
-0
src/main/resources/application.yml
src/main/resources/application.yml
+9
-6
No files found.
build.gradle
View file @
3972e891
...
@@ -21,18 +21,14 @@ repositories {
...
@@ -21,18 +21,14 @@ repositories {
}
}
dependencies
{
dependencies
{
// https://mvnrepository.com/artifact/com.google.guava/guava
// https://mvnrepository.com/artifact/com.google.guava/guava
implementation
group:
'com.google.guava'
,
name:
'guava'
,
version:
'31.1-jre'
implementation
group:
'com.google.guava'
,
name:
'guava'
,
version:
'31.1-jre'
// https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter
// https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter
implementation
group:
'io.springfox'
,
name:
'springfox-boot-starter'
,
version:
'3.0.0'
implementation
group:
'io.springfox'
,
name:
'springfox-boot-starter'
,
version:
'3.0.0'
// ----- Spring Boot
// ----- Spring Boot
implementation
group:
'org.springframework.boot'
,
name:
'spring-boot-starter-web'
,
version:
'2.5.7'
implementation
group:
'org.springframework.boot'
,
name:
'spring-boot-starter-web'
,
version:
'2.5.7'
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-freemarker
// implementation group: 'org.springframework.boot', name: 'spring-boot-starter-freemarker', version: '2.5.7'
// ----- 日志打印工具 log4j
// ----- 日志打印工具 log4j
implementation
group:
'org.apache.logging.log4j'
,
name:
'log4j-core'
,
version:
'2.17.0'
implementation
group:
'org.apache.logging.log4j'
,
name:
'log4j-core'
,
version:
'2.17.0'
...
...
src/main/java/moe/mycard/tabulator/common/LoginInterceptor.java
View file @
3972e891
package
moe.mycard.tabulator.common
;
package
moe.mycard.tabulator.common
;
import
moe.mycard.tabulator.exception.CavCore
;
import
moe.mycard.tabulator.exception.CavException
;
import
moe.mycard.tabulator.exception.CavException
;
import
moe.mycard.tabulator.model.epi.MyCardEPI
;
import
moe.mycard.tabulator.model.epi.ResponseEPI
;
import
moe.mycard.tabulator.redis.Auth_RedisKey
;
import
moe.mycard.tabulator.tool.UtilEPI
;
import
okhttp3.OkHttpClient
;
import
okhttp3.Request
;
import
okhttp3.Response
;
import
org.jetbrains.annotations.NotNull
;
import
org.jetbrains.annotations.NotNull
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Component
;
import
org.springframework.stereotype.Component
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
javax.annotation.Resource
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.util.concurrent.TimeUnit
;
@Component
@Component
public
class
LoginInterceptor
implements
HandlerInterceptor
{
public
class
LoginInterceptor
implements
HandlerInterceptor
{
p
rivate
final
CavCore
c
=
CavCore
.
getC
()
;
p
ublic
boolean
isAuth
=
true
;
// 这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
@Resource
private
RedisTemplate
<
String
,
Long
>
redisTemplate
;
/**
* 这个方法是在访问接口之前执行的,我们只需要在这里写验证登陆状态的业务逻辑,就可以在用户调用指定接口之前验证登陆状态了
*
* @param request current HTTP request
* @param response current HTTP response
* @param handler chosen handler to execute, for type and/or instance evaluation
*/
public
boolean
preHandle
(
public
boolean
preHandle
(
HttpServletRequest
request
,
@NotNull
HttpServletResponse
response
,
@NotNull
Object
handler
)
{
@NotNull
HttpServletRequest
request
,
String
test
=
request
.
getHeader
(
"Authentication"
);
@NotNull
HttpServletResponse
response
,
boolean
auth
=
test
!=
null
;
@NotNull
Object
handler
)
{
if
(!
auth
)
{
if
(
isAuth
)
{
throw
CavException
.
cast
(
301
,
"无权访问"
);
String
token
=
request
.
getHeader
(
"Authorization"
);
if
(
token
==
null
)
{
throw
CavException
.
cast
(
301
,
"无权访问"
);
}
else
{
authCheck
(
token
);
}
}
}
return
auth
;
return
true
;
}
}
private
void
authCheck
(
String
token
)
{
String
_key
=
Auth_RedisKey
.
group
;
Long
cacheUserId
=
redisTemplate
.
opsForValue
().
get
(
token
);
if
(
cacheUserId
==
null
)
{
// ===== 是否在c萌服务器存在 =====
Request
request
=
new
Request
.
Builder
()
.
url
(
"https://sapi.moecube.com:444/accounts/authUser"
)
.
method
(
"GET"
,
null
)
.
addHeader
(
"Authorization"
,
token
)
.
build
();
try
(
Response
response
=
new
OkHttpClient
().
newBuilder
().
build
().
newCall
(
request
).
execute
())
{
ResponseEPI
<
MyCardEPI
>
epi
=
UtilEPI
.
getMyCard
(
response
);
if
(
epi
.
getCode
()
!=
200
)
{
throw
CavException
.
cast
(
301
,
"无权访问"
+
epi
.
getData
().
getMessage
());
}
else
{
redisTemplate
.
opsForValue
()
.
set
(
_key
+
token
,
epi
.
getData
().
encryptionId
(),
1
,
TimeUnit
.
HOURS
);
}
}
catch
(
IOException
e
)
{
throw
CavException
.
cast
(
301
,
"无权访问,系统IO异常"
);
}
catch
(
NullPointerException
e
)
{
throw
CavException
.
cast
(
301
,
"无权访问,请求失败"
);
}
// ===== 是否在c萌服务器存在 =====
}
else
{
redisTemplate
.
opsForValue
().
set
(
_key
+
token
,
cacheUserId
,
1
,
TimeUnit
.
HOURS
);
}
}
}
}
src/main/java/moe/mycard/tabulator/common/
Web
MvcConfigurer.java
→
src/main/java/moe/mycard/tabulator/common/MvcConfigurer.java
View file @
3972e891
package
moe.mycard.tabulator.common
;
package
moe.mycard.tabulator.common
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport
;
/**
/**
* 在springboot2.0.0之后,WebMvcConfigurerAdapter已经过时了 会使用WebMvcConfigurer或者WebMvcConfigurationSupport替代
* 在springboot2.0.0之后,WebMvcConfigurerAdapter已经过时了 会使用WebMvcConfigurer或者WebMvcConfigurationSupport替代
*
* @author wyj
* @create 2019-06-01 21:48
*/
*/
@Configuration
@Configuration
public
class
Web
MvcConfigurer
extends
WebMvcConfigurationSupport
{
public
class
MvcConfigurer
extends
WebMvcConfigurationSupport
{
/**
/** 由于拦截器的加载时间点在spring context之前,所以需要提前注入bean,否则拦截类内部注入注解会失效 */
* 在springboot2.0.0之前继承WebMvcConfigurerAdapter类,重写addInterceptors方法
@Bean
*
public
LoginInterceptor
getLoginInterceptor
()
{
* @param registry
return
new
LoginInterceptor
();
*/
}
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// /**
// * 拦截器按照顺序执行,如果不同拦截器拦截存在相同的URL,前面的拦截器会执行,后面的拦截器将不执行
// */
// registry.addInterceptor(new AuthorityInterceptor())
// .addPathPatterns("/user/**");
// super.addInterceptors(registry);
// }
/**
* 在springboot2.0.0之后实现WebMvcConfigurer接口,重写addInterceptors方法
*
* @param registry
*/
// @Override
// public void addInterceptors(InterceptorRegistry registry) {
// /**
// * 拦截器按照顺序执行,如果不同拦截器拦截存在相同的URL,前面的拦截器会执行,后面的拦截器将不执行
// */
// registry.addInterceptor(new AuthorityInterceptor())
// .addPathPatterns("/user/**");
// }
/**
/**
* 在springboot2.0.0之后继承WebMvcConfigurationSupport类,重写addInterceptors方法
* 在springboot2.0.0之后继承WebMvcConfigurationSupport类,重写addInterceptors方法
*
*
* @param registry
* @param registry
~
*/
*/
@Override
@Override
protected
void
addInterceptors
(
InterceptorRegistry
registry
)
{
protected
void
addInterceptors
(
InterceptorRegistry
registry
)
{
/** 拦截器按照顺序执行,如果不同拦截器拦截存在相同的URL,前面的拦截器会执行,后面的拦截器将不执行 */
/** 拦截器按照顺序执行,如果不同拦截器拦截存在相同的URL,前面的拦截器会执行,后面的拦截器将不执行 */
registry
.
addInterceptor
(
new
LoginInterceptor
()).
addPathPatterns
(
"/**"
);
registry
.
addInterceptor
(
get
LoginInterceptor
()).
addPathPatterns
(
"/**"
);
super
.
addInterceptors
(
registry
);
super
.
addInterceptors
(
registry
);
}
}
}
}
src/main/java/moe/mycard/tabulator/exception/GlobalExceptionProcessor.java
View file @
3972e891
...
@@ -23,9 +23,34 @@ import java.util.List;
...
@@ -23,9 +23,34 @@ import java.util.List;
*
*
* @author SPiCa
* @author SPiCa
*/
*/
@Slf4j
@RestControllerAdvice
@RestControllerAdvice
public
class
GlobalExceptionProcessor
{
public
class
GlobalExceptionProcessor
extends
Method
{
/** 全局未知异常捕获 */
@ExceptionHandler
(
Exception
.
class
)
public
ReturnMessage
<
Void
>
exception
(
Exception
ex
,
HttpServletRequest
request
)
{
log
(
true
,
ex
,
request
);
return
ReturnMessage
.
error
();
}
/** 请求类型错误 */
@ExceptionHandler
(
HttpRequestMethodNotSupportedException
.
class
)
public
ReturnMessage
<
Void
>
exception
(
HttpRequestMethodNotSupportedException
ex
,
HttpServletRequest
request
)
{
log
(
false
,
ex
,
request
);
return
ReturnMessage
.
error
(
"请求类型错误,该资源不支持此请求类型"
);
}
/** 内置异常捕获 */
@ExceptionHandler
(
CavException
.
class
)
public
ReturnMessage
<
Void
>
exception
(
CavException
ex
,
HttpServletRequest
request
)
{
log
(
true
,
ex
,
request
);
return
ex
.
result
();
}
}
@Slf4j
class
Method
{
private
static
final
ObjectMapper
om
=
new
ObjectMapper
();
private
static
final
ObjectMapper
om
=
new
ObjectMapper
();
...
@@ -54,28 +79,13 @@ public class GlobalExceptionProcessor {
...
@@ -54,28 +79,13 @@ public class GlobalExceptionProcessor {
return
null
;
return
null
;
}
}
/** 全局未知异常捕获 */
@ExceptionHandler
(
Exception
.
class
)
public
ReturnMessage
<
Void
>
exception
(
Exception
ex
,
HttpServletRequest
request
)
{
log
(
true
,
ex
,
request
);
return
ReturnMessage
.
error
();
}
/** 请求类型错误 */
@ExceptionHandler
(
HttpRequestMethodNotSupportedException
.
class
)
public
ReturnMessage
<
Void
>
exception
(
HttpRequestMethodNotSupportedException
ex
,
HttpServletRequest
request
)
{
log
(
false
,
ex
,
request
);
return
ReturnMessage
.
error
(
"请求类型错误,该资源不支持此请求类型"
);
}
/**
/**
* 打印错误消息
* 打印错误消息
*
*
* @param ex 异常信息
* @param ex 异常信息
* @param request 请求对象
* @param request 请求对象
*/
*/
pr
ivate
void
log
(
boolean
all
,
Exception
ex
,
HttpServletRequest
request
)
{
pr
otected
void
log
(
boolean
all
,
Exception
ex
,
HttpServletRequest
request
)
{
log
.
error
(
log
.
error
(
"{}:************************ STR *******************************"
,
all
?
"未知异常"
:
"预知异常"
);
"{}:************************ STR *******************************"
,
all
?
"未知异常"
:
"预知异常"
);
log
.
error
(
"异常名称:【{}】"
,
getMsg
(
ex
));
log
.
error
(
"异常名称:【{}】"
,
getMsg
(
ex
));
...
@@ -144,11 +154,4 @@ public class GlobalExceptionProcessor {
...
@@ -144,11 +154,4 @@ public class GlobalExceptionProcessor {
printCause
(
cause
.
getCause
());
printCause
(
cause
.
getCause
());
}
}
}
}
/** 内置异常捕获 */
@ExceptionHandler
(
CavException
.
class
)
public
ReturnMessage
<
Void
>
exception
(
CavException
ex
,
HttpServletRequest
request
)
{
log
(
false
,
ex
,
request
);
return
ex
.
result
();
}
}
}
src/main/java/moe/mycard/tabulator/model/epi/MyCardEPI.java
0 → 100644
View file @
3972e891
package
moe.mycard.tabulator.model.epi
;
import
lombok.Data
;
/** C萌平台接口响应实体 */
@Data
public
class
MyCardEPI
{
/** 对应用户id */
private
Long
id
;
/** 对应用户名称 */
private
String
username
;
/** 失败的时候返回的消息 */
private
String
message
;
/** 简易id换算,防止被外部捕获到原id */
public
Long
encryptionId
()
{
return
id
^
3399
;
}
}
src/main/java/moe/mycard/tabulator/model/epi/ResponseEPI.java
0 → 100644
View file @
3972e891
package
moe.mycard.tabulator.model.epi
;
import
lombok.Data
;
/** 外部接口响应报文封装体 */
@Data
public
class
ResponseEPI
<
T
>
{
/** 响应码 */
private
Integer
code
;
/** 报文数据集 */
private
T
data
;
}
src/main/java/moe/mycard/tabulator/redis/Auth_RedisKey.java
0 → 100644
View file @
3972e891
package
moe.mycard.tabulator.redis
;
/** 权限管理key */
public
class
Auth_RedisKey
{
/** 组名 */
public
static
final
String
group
=
RedisKey
.
global
+
"auth:"
;
}
src/main/java/moe/mycard/tabulator/redis/RedisKey.java
0 → 100644
View file @
3972e891
package
moe.mycard.tabulator.redis
;
/** redis key */
public
class
RedisKey
{
/** 统一组 */
public
static
final
String
global
=
"tabulator:"
;
}
src/main/java/moe/mycard/tabulator/tool/UtilEPI.java
0 → 100644
View file @
3972e891
package
moe.mycard.tabulator.tool
;
import
com.alibaba.fastjson.JSON
;
import
moe.mycard.tabulator.model.epi.MyCardEPI
;
import
moe.mycard.tabulator.model.epi.ResponseEPI
;
import
okhttp3.Response
;
import
java.io.IOException
;
import
java.util.Objects
;
/** 外部接口返回数据封装 */
public
class
UtilEPI
{
public
static
ResponseEPI
<
MyCardEPI
>
getMyCard
(
Response
response
)
throws
IOException
{
ResponseEPI
<
MyCardEPI
>
epi
=
new
ResponseEPI
<>();
epi
.
setCode
(
response
.
code
());
epi
.
setData
(
JSON
.
parseObject
(
Objects
.
requireNonNull
(
response
.
body
()).
string
(),
MyCardEPI
.
class
));
return
epi
;
}
}
src/main/resources/application.yml
View file @
3972e891
...
@@ -19,9 +19,12 @@ spring:
...
@@ -19,9 +19,12 @@ spring:
url
:
jdbc:mysql://${IS_MYSQL_HOST:localhost}:${IS_MYSQL_PORT:3307}/${IS_MYSQL_DATABASE:ygo_table}?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
url
:
jdbc:mysql://${IS_MYSQL_HOST:localhost}:${IS_MYSQL_PORT:3307}/${IS_MYSQL_DATABASE:ygo_table}?useUnicode=true&characterEncoding=utf8&useSSL=false&allowPublicKeyRetrieval=true
username
:
${IS_MYSQL_USERNAME:root}
username
:
${IS_MYSQL_USERNAME:root}
password
:
${IS_MYSQL_USERPASS:spica...}
password
:
${IS_MYSQL_USERPASS:spica...}
# redis:
# host: ${IS_REDIS_HOST:10.1.1.122}
redis
:
# port: ${IS_REDIS_PORT:6379}
host
:
${IS_REDIS_HOST:192.168.1.13}
# database: ${IS_REDIS_DATABASE:1}
port
:
${IS_REDIS_PORT:6379}
# # password: ${IS_REDIS_PASS:null}
database
:
${IS_REDIS_DATABASE:1}
# timeout: 5000
# password: ${IS_REDIS_PASS:null}
timeout
:
5000
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment