Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Sign in / Register
Toggle navigation
A
auc
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
peihaiyang
auc
Commits
a9adc66d
Commit
a9adc66d
authored
May 12, 2022
by
peihaiyang
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
init:初始化项目
parents
Pipeline
#5851
canceled with stages
Changes
22
Pipelines
1
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
923 additions
and
0 deletions
+923
-0
pom.xml
pom.xml
+53
-0
AUCSaTokenApplication.java
src/main/java/com/tianyan/auc/AUCSaTokenApplication.java
+15
-0
AjaxJson.java
src/main/java/com/tianyan/auc/common/AjaxJson.java
+165
-0
SpringUtils.java
src/main/java/com/tianyan/auc/common/SpringUtils.java
+114
-0
TypeServiceEnum.java
src/main/java/com/tianyan/auc/common/TypeServiceEnum.java
+46
-0
IgnoreWhiteProperties.java
...in/java/com/tianyan/auc/config/IgnoreWhiteProperties.java
+27
-0
MybatisPlusConfig.java
src/main/java/com/tianyan/auc/config/MybatisPlusConfig.java
+48
-0
SaTokenConfigure.java
src/main/java/com/tianyan/auc/config/SaTokenConfigure.java
+59
-0
UserAuthFilter.java
src/main/java/com/tianyan/auc/config/UserAuthFilter.java
+23
-0
LoginController.java
...main/java/com/tianyan/auc/controller/LoginController.java
+51
-0
GlobalException.java
src/main/java/com/tianyan/auc/exception/GlobalException.java
+57
-0
SaTokenFilterExceptionHandler.java
.../tianyan/auc/exception/SaTokenFilterExceptionHandler.java
+24
-0
CardService.java
src/main/java/com/tianyan/auc/service/CardService.java
+8
-0
CountService.java
src/main/java/com/tianyan/auc/service/CountService.java
+8
-0
EmailService.java
src/main/java/com/tianyan/auc/service/EmailService.java
+10
-0
PhoneService.java
src/main/java/com/tianyan/auc/service/PhoneService.java
+10
-0
UserHandle.java
src/main/java/com/tianyan/auc/service/UserHandle.java
+21
-0
CardServiceImpl.java
...in/java/com/tianyan/auc/service/impl/CardServiceImpl.java
+23
-0
CountServiceImpl.java
...n/java/com/tianyan/auc/service/impl/CountServiceImpl.java
+25
-0
EmailServiceImpl.java
...n/java/com/tianyan/auc/service/impl/EmailServiceImpl.java
+31
-0
PhoneServiceImpl.java
...n/java/com/tianyan/auc/service/impl/PhoneServiceImpl.java
+35
-0
application.yml
src/main/resources/application.yml
+70
-0
No files found.
pom.xml
0 → 100644
View file @
a9adc66d
<?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.tianyan
</groupId>
<artifactId>
authentication-center
</artifactId>
<version>
1.0
</version>
<!-- SpringBoot -->
<parent>
<groupId>
org.springframework.boot
</groupId>
<artifactId>
spring-boot-starter-parent
</artifactId>
<version>
2.3.3.RELEASE
</version>
</parent>
<!-- 指定一些属性 -->
<properties>
<java.version>
1.8
</java.version>
<maven-jar-plugin.version>
3.1.1
</maven-jar-plugin.version>
</properties>
<dependencies>
<!-- Sa-Token 权限认证, 在线文档:http://sa-token.dev33.cn/ -->
<dependency>
<groupId>
cn.dev33
</groupId>
<artifactId>
sa-token-spring-boot-starter
</artifactId>
<version>
1.29.0
</version>
</dependency>
<!-- Sa-Token 整合 jwt -->
<dependency>
<groupId>
cn.dev33
</groupId>
<artifactId>
sa-token-jwt
</artifactId>
<version>
1.29.0
</version>
</dependency>
<!--mybatis-plus 持久层-->
<dependency>
<groupId>
com.baomidou
</groupId>
<artifactId>
mybatis-plus-boot-starter
</artifactId>
<version>
3.0.5
</version>
</dependency>
<dependency>
<groupId>
mysql
</groupId>
<artifactId>
mysql-connector-java
</artifactId>
<version>
5.1.46
</version>
</dependency>
</dependencies>
</project>
\ No newline at end of file
src/main/java/com/tianyan/auc/AUCSaTokenApplication.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
;
import
cn.dev33.satoken.SaManager
;
import
com.fasterxml.jackson.core.JsonProcessingException
;
import
org.springframework.boot.SpringApplication
;
import
org.springframework.boot.autoconfigure.SpringBootApplication
;
@SpringBootApplication
public
class
AUCSaTokenApplication
{
public
static
void
main
(
String
[]
args
){
SpringApplication
.
run
(
AUCSaTokenApplication
.
class
,
args
);
System
.
out
.
println
(
"启动成功:Sa-Token配置如下:"
+
SaManager
.
getConfig
());
}
}
\ No newline at end of file
src/main/java/com/tianyan/auc/common/AjaxJson.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
common
;
import
java.util.List
;
/**
* @author PHY
* 统一返回数据格式
* @date 2022/5/12$-9:35
*/
public
class
AjaxJson
{
// 序列化版本号
private
static
final
long
serialVersionUID
=
1L
;
// 成功状态码
public
static
final
int
CODE_SUCCESS
=
200
;
// 错误状态码
public
static
final
int
CODE_ERROR
=
500
;
// 警告状态码
public
static
final
int
CODE_NOT_JUR
=
403
;
// 无权限状态码
public
static
final
int
CODE_NOT_LOGIN
=
401
;
// 未登录状态码
public
static
final
int
CODE_INVALID_REQUEST
=
400
;
// 无效请求状态码
public
static
final
int
CODE_WARNING
=
501
;
// 状态码
public
String
msg
;
// 描述信息
public
Object
data
;
// 携带对象
public
Long
dataCount
;
// 数据总数,用于分页
public
int
code
;
/**
* 返回code
* @return
*/
public
int
getCode
()
{
return
this
.
code
;
}
/**
* 给msg赋值,连缀风格
*/
public
AjaxJson
setMsg
(
String
msg
)
{
this
.
msg
=
msg
;
return
this
;
}
public
String
getMsg
()
{
return
this
.
msg
;
}
/**
* 给data赋值,连缀风格
*/
public
AjaxJson
setData
(
Object
data
)
{
this
.
data
=
data
;
return
this
;
}
/**
* 将data还原为指定类型并返回
*/
@SuppressWarnings
(
"unchecked"
)
public
<
T
>
T
getData
(
Class
<
T
>
cs
)
{
return
(
T
)
data
;
}
// ============================ 构建 ==================================
public
AjaxJson
(
int
code
,
String
msg
,
Object
data
,
Long
dataCount
)
{
this
.
code
=
code
;
this
.
msg
=
msg
;
this
.
data
=
data
;
this
.
dataCount
=
dataCount
;
}
// 返回成功
public
static
AjaxJson
getSuccess
()
{
return
new
AjaxJson
(
CODE_SUCCESS
,
"ok"
,
null
,
null
);
}
public
static
AjaxJson
getSuccess
(
String
msg
)
{
return
new
AjaxJson
(
CODE_SUCCESS
,
msg
,
null
,
null
);
}
public
static
AjaxJson
getSuccess
(
String
msg
,
Object
data
)
{
return
new
AjaxJson
(
CODE_SUCCESS
,
msg
,
data
,
null
);
}
public
static
AjaxJson
getSuccessData
(
Object
data
)
{
return
new
AjaxJson
(
CODE_SUCCESS
,
"ok"
,
data
,
null
);
}
public
static
AjaxJson
getSuccessArray
(
Object
...
data
)
{
return
new
AjaxJson
(
CODE_SUCCESS
,
"ok"
,
data
,
null
);
}
// 返回失败
public
static
AjaxJson
getError
()
{
return
new
AjaxJson
(
CODE_ERROR
,
"error"
,
null
,
null
);
}
public
static
AjaxJson
getError
(
String
msg
)
{
return
new
AjaxJson
(
CODE_ERROR
,
msg
,
null
,
null
);
}
// 返回警告
public
static
AjaxJson
getWarning
()
{
return
new
AjaxJson
(
CODE_ERROR
,
"warning"
,
null
,
null
);
}
public
static
AjaxJson
getWarning
(
String
msg
)
{
return
new
AjaxJson
(
CODE_WARNING
,
msg
,
null
,
null
);
}
// 返回未登录
public
static
AjaxJson
getNotLogin
()
{
return
new
AjaxJson
(
CODE_NOT_LOGIN
,
"未登录,请登录后再次访问"
,
null
,
null
);
}
// 返回没有权限的
public
static
AjaxJson
getNotJur
(
String
msg
)
{
return
new
AjaxJson
(
CODE_NOT_JUR
,
msg
,
null
,
null
);
}
// 返回一个自定义状态码的
public
static
AjaxJson
get
(
int
code
,
String
msg
){
return
new
AjaxJson
(
code
,
msg
,
null
,
null
);
}
// 返回分页和数据的
public
static
AjaxJson
getPageData
(
Long
dataCount
,
Object
data
){
return
new
AjaxJson
(
CODE_SUCCESS
,
"ok"
,
data
,
dataCount
);
}
// 返回,根据受影响行数的(大于0=ok,小于0=error)
public
static
AjaxJson
getByLine
(
int
line
){
if
(
line
>
0
){
return
getSuccess
(
"ok"
,
line
);
}
return
getError
(
"error"
).
setData
(
line
);
}
// 返回,根据布尔值来确定最终结果的 (true=ok,false=error)
public
static
AjaxJson
getByBoolean
(
boolean
b
){
return
b
?
getSuccess
(
"ok"
)
:
getError
(
"error"
);
}
@SuppressWarnings
(
"rawtypes"
)
@Override
public
String
toString
()
{
String
data_string
=
null
;
if
(
data
==
null
){
}
else
if
(
data
instanceof
List
){
data_string
=
"List(length="
+
((
List
)
data
).
size
()
+
")"
;
}
else
{
data_string
=
data
.
toString
();
}
return
"{"
+
"\"code\": "
+
this
.
getCode
()
+
", \"msg\": \""
+
this
.
getMsg
()
+
"\""
+
", \"data\": "
+
data_string
+
", \"dataCount\": "
+
dataCount
+
"}"
;
}
}
src/main/java/com/tianyan/auc/common/SpringUtils.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
common
;
import
org.springframework.aop.framework.AopContext
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.NoSuchBeanDefinitionException
;
import
org.springframework.beans.factory.config.BeanFactoryPostProcessor
;
import
org.springframework.beans.factory.config.ConfigurableListableBeanFactory
;
import
org.springframework.stereotype.Component
;
/**
* spring工具类 方便在非spring管理环境中获取bean
*
* @author sun.zy
*/
@Component
public
final
class
SpringUtils
implements
BeanFactoryPostProcessor
{
/** Spring应用上下文环境 */
private
static
ConfigurableListableBeanFactory
beanFactory
;
@Override
public
void
postProcessBeanFactory
(
ConfigurableListableBeanFactory
beanFactory
)
throws
BeansException
{
SpringUtils
.
beanFactory
=
beanFactory
;
}
/**
* 获取对象
*
* @param name
* @return Object 一个以所给名字注册的bean的实例
* @throws BeansException
*
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
getBean
(
String
name
)
throws
BeansException
{
return
(
T
)
beanFactory
.
getBean
(
name
);
}
/**
* 获取类型为requiredType的对象
*
* @param clz
* @return
* @throws BeansException
*
*/
public
static
<
T
>
T
getBean
(
Class
<
T
>
clz
)
throws
BeansException
{
T
result
=
(
T
)
beanFactory
.
getBean
(
clz
);
return
result
;
}
/**
* 如果BeanFactory包含一个与所给名称匹配的bean定义,则返回true
*
* @param name
* @return boolean
*/
public
static
boolean
containsBean
(
String
name
)
{
return
beanFactory
.
containsBean
(
name
);
}
/**
* 判断以给定名字注册的bean定义是一个singleton还是一个prototype。 如果与给定名字相应的bean定义没有被找到,将会抛出一个异常(NoSuchBeanDefinitionException)
*
* @param name
* @return boolean
* @throws NoSuchBeanDefinitionException
*
*/
public
static
boolean
isSingleton
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
isSingleton
(
name
);
}
/**
* @param name
* @return Class 注册对象的类型
* @throws NoSuchBeanDefinitionException
*
*/
public
static
Class
<?>
getType
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
getType
(
name
);
}
/**
* 如果给定的bean名字在bean定义中有别名,则返回这些别名
*
* @param name
* @return
* @throws NoSuchBeanDefinitionException
*
*/
public
static
String
[]
getAliases
(
String
name
)
throws
NoSuchBeanDefinitionException
{
return
beanFactory
.
getAliases
(
name
);
}
/**
* 获取aop代理对象
*
* @param invoker
* @return
*/
@SuppressWarnings
(
"unchecked"
)
public
static
<
T
>
T
getAopProxy
(
T
invoker
)
{
return
(
T
)
AopContext
.
currentProxy
();
}
}
src/main/java/com/tianyan/auc/common/TypeServiceEnum.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
common
;
/**
* @author PHY
* @date 2022/4/29$-10:48
* 返回对应的处理类
*/
public
enum
TypeServiceEnum
{
ID_CARD
(
"cardService"
,
"(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)"
),
//身份证号
PHONE
(
"phoneService"
,
"^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\\d{8}$"
),
//手机号
EMAIL
(
"emailService"
,
"^\\w+([-+.]\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*$"
),
//邮箱
COUNT
(
"countService"
,
"^[a-zA-Z][a-zA-Z0-9_]{4,15}$"
);
//账号
private
String
name
;
private
String
type
;
TypeServiceEnum
(
String
name
,
String
type
)
{
this
.
name
=
name
;
this
.
type
=
type
;
}
public
String
getName
()
{
return
name
;
}
public
String
getType
()
{
return
type
;
}
/**
* 根据传入的value 进行匹配对应的实现类名,进行实现
* @param val 13000000000或者123@qq.com,23456742,110119010001999019X
* @return
*/
public
static
String
getTypeService
(
String
val
){
TypeServiceEnum
[]
values
=
TypeServiceEnum
.
values
();
for
(
TypeServiceEnum
value
:
values
)
{
if
(
val
.
matches
(
value
.
getType
()))
{
return
value
.
getName
();
}
}
return
PHONE
.
getName
();
}
}
src/main/java/com/tianyan/auc/config/IgnoreWhiteProperties.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
config
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
java.util.ArrayList
;
import
java.util.List
;
@ConfigurationProperties
(
prefix
=
"ignore"
)
public
class
IgnoreWhiteProperties
{
/**
* 放行白名单配置,网关不校验此处的白名单
*/
private
List
<
String
>
whites
=
new
ArrayList
<>();
public
List
<
String
>
getWhites
()
{
return
whites
;
}
public
void
setWhites
(
List
<
String
>
whites
)
{
this
.
whites
=
whites
;
}
}
\ No newline at end of file
src/main/java/com/tianyan/auc/config/MybatisPlusConfig.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
config
;
import
com.baomidou.mybatisplus.core.injector.ISqlInjector
;
import
com.baomidou.mybatisplus.extension.injector.LogicSqlInjector
;
import
com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor
;
import
com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor
;
import
org.mybatis.spring.annotation.MapperScan
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.context.annotation.Profile
;
import
org.springframework.transaction.annotation.EnableTransactionManagement
;
/**
* @author PHY
* @date 2022/5/12$-10:39
*/
@EnableTransactionManagement
@Configuration
@MapperScan
(
"com.lingyan.auc.*.mapper"
)
public
class
MybatisPlusConfig
{
/**
* 分页插件
*/
@Bean
public
PaginationInterceptor
paginationInterceptor
()
{
PaginationInterceptor
paginationInterceptor
=
new
PaginationInterceptor
();
// paginationInterceptor.setLimit(你的最大单页限制数量,默认 500 条,小于 0 如 -1 不受限制);
return
paginationInterceptor
;
}
@Bean
public
ISqlInjector
sqlInjector
()
{
return
new
LogicSqlInjector
();
}
/**
* SQL执行效率插件
*/
@Bean
@Profile
({
"dev"
,
"test"
})
// 设置 dev test 环境开启
public
PerformanceInterceptor
performanceInterceptor
()
{
PerformanceInterceptor
performanceInterceptor
=
new
PerformanceInterceptor
();
performanceInterceptor
.
setMaxTime
(
2000
);
performanceInterceptor
.
setFormat
(
true
);
return
performanceInterceptor
;
}
// sql time too large
}
src/main/java/com/tianyan/auc/config/SaTokenConfigure.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
config
;
import
cn.dev33.satoken.context.SaHolder
;
import
cn.dev33.satoken.filter.SaServletFilter
;
import
cn.dev33.satoken.jwt.StpLogicJwtForStyle
;
import
cn.dev33.satoken.stp.StpLogic
;
import
com.tianyan.auc.exception.SaTokenFilterExceptionHandler
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.boot.context.properties.EnableConfigurationProperties
;
import
org.springframework.context.annotation.Bean
;
import
org.springframework.context.annotation.Configuration
;
@Configuration
@EnableConfigurationProperties
(
IgnoreWhiteProperties
.
class
)
public
class
SaTokenConfigure
{
// Sa-Token 整合 jwt (Style模式)
@Bean
public
StpLogic
getStpLogicJwt
()
{
return
new
StpLogicJwtForStyle
();
}
@Autowired
private
IgnoreWhiteProperties
ignoreWhiteProperties
;
@Autowired
private
UserAuthFilter
userAuthFilter
;
@Autowired
private
SaTokenFilterExceptionHandler
saTokenFilterExceptionHandler
;
/**
* 注册 [Sa-Token全局过滤器]
*/
// @Bean
public
SaServletFilter
getSaServletFilter
()
{
return
new
SaServletFilter
()
// 指定 拦截路由 与 放行路由
.
addInclude
(
"/**"
).
setExcludeList
(
ignoreWhiteProperties
.
getWhites
())
// 认证函数: 每次请求执行
.
setAuth
(
userAuthFilter
)
// 异常处理函数:每次认证函数发生异常时执行此函数
.
setError
(
saTokenFilterExceptionHandler
)
// 前置函数:在每次认证函数之前执行
.
setBeforeAuth
(
r
->
{
// ---------- 设置一些安全响应头 ----------
SaHolder
.
getResponse
()
// 服务器名称
.
setServer
(
"sa-server"
)
// 是否可以在iframe显示视图: DENY=不可以 | SAMEORIGIN=同域下可以 | ALLOW-FROM uri=指定域名下可以
.
setHeader
(
"X-Frame-Options"
,
"SAMEORIGIN"
)
// 是否启用浏览器默认XSS防护: 0=禁用 | 1=启用 | 1; mode=block 启用, 并在检查到XSS攻击时,停止渲染页面
.
setHeader
(
"X-XSS-Protection"
,
"1; mode=block"
)
// 禁用浏览器内容嗅探
.
setHeader
(
"X-Content-Type-Options"
,
"nosniff"
);
});
}
}
\ No newline at end of file
src/main/java/com/tianyan/auc/config/UserAuthFilter.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
config
;
import
cn.dev33.satoken.filter.SaFilterAuthStrategy
;
import
cn.dev33.satoken.router.SaRouter
;
import
cn.dev33.satoken.stp.StpUtil
;
import
org.springframework.stereotype.Component
;
/**
* @author PHY
* @date 2022/5/12$-10:47
*/
@Component
public
class
UserAuthFilter
implements
SaFilterAuthStrategy
{
@Override
public
void
run
(
Object
o
)
{
System
.
out
.
println
(
"---------- 进入Sa-Token全局认证 -----------"
);
// 登录认证 -- 拦截所有路由,并排除/user/doLogin 用于开放登录
SaRouter
.
match
(
"/**"
,
"/user/doLogin"
,
()
->
StpUtil
.
checkLogin
());
// 更多拦截处理方式,请参考“路由拦截式鉴权”章节
}
}
src/main/java/com/tianyan/auc/controller/LoginController.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
controller
;
import
cn.dev33.satoken.stp.StpUtil
;
import
cn.dev33.satoken.util.SaResult
;
import
org.springframework.web.bind.annotation.RequestMapping
;
import
org.springframework.web.bind.annotation.RestController
;
/**
* @author PHY
* @date 2022/5/12$-9:30
*
*/
@RestController
@RequestMapping
(
"/user/"
)
public
class
LoginController
{
// 测试登录 ---- http://localhost:8081/user/doLogin?name=zhang&pwd=123456
@RequestMapping
(
"doLogin"
)
public
SaResult
doLogin
(
String
name
,
String
pwd
)
{
// 此处仅作模拟示例,真实项目需要从数据库中查询数据进行比对
if
(
"zhang"
.
equals
(
name
)
&&
"123456"
.
equals
(
pwd
))
{
StpUtil
.
login
(
10001
);
return
SaResult
.
ok
(
"登录成功"
);
}
return
SaResult
.
error
(
"登录失败"
);
}
// 查询登录状态 ---- http://localhost:8081/user/isLogin
@RequestMapping
(
"isLogin"
)
public
SaResult
isLogin
()
{
return
SaResult
.
ok
(
"是否登录:"
+
StpUtil
.
isLogin
());
}
/**
* 查询 Token 信息 ---- http://localhost:8081/user/tokenInfo
* @return
*/
@RequestMapping
(
"tokenInfo"
)
public
SaResult
tokenInfo
()
{
return
SaResult
.
data
(
StpUtil
.
getTokenInfo
());
}
/**
注销 ---- http://localhost:8081/user/logout
*/
@RequestMapping
(
"logout"
)
public
SaResult
logout
()
{
StpUtil
.
logout
();
return
SaResult
.
ok
();
}
}
src/main/java/com/tianyan/auc/exception/GlobalException.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
exception
;
import
cn.dev33.satoken.exception.DisableLoginException
;
import
cn.dev33.satoken.exception.NotLoginException
;
import
cn.dev33.satoken.exception.NotPermissionException
;
import
cn.dev33.satoken.exception.NotRoleException
;
import
com.tianyan.auc.common.AjaxJson
;
import
org.springframework.web.bind.annotation.ControllerAdvice
;
import
org.springframework.web.bind.annotation.ExceptionHandler
;
import
org.springframework.web.bind.annotation.ResponseBody
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/**
* 全局异常处理
*/
@ControllerAdvice
public
class
GlobalException
{
// 全局异常拦截(拦截项目中的所有异常)
@ResponseBody
@ExceptionHandler
public
AjaxJson
handlerException
(
Exception
e
,
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
Exception
{
// 打印堆栈,以供调试
System
.
out
.
println
(
"全局异常---------------"
);
e
.
printStackTrace
();
// 不同异常返回不同状态码
AjaxJson
aj
=
null
;
if
(
e
instanceof
NotLoginException
)
{
// 如果是未登录异常
NotLoginException
ee
=
(
NotLoginException
)
e
;
aj
=
AjaxJson
.
getNotLogin
().
setMsg
(
ee
.
getMessage
());
}
else
if
(
e
instanceof
NotRoleException
)
{
// 如果是角色异常
NotRoleException
ee
=
(
NotRoleException
)
e
;
aj
=
AjaxJson
.
getNotJur
(
"无此角色:"
+
ee
.
getRole
());
}
else
if
(
e
instanceof
NotPermissionException
)
{
// 如果是权限异常
NotPermissionException
ee
=
(
NotPermissionException
)
e
;
aj
=
AjaxJson
.
getNotJur
(
"无此权限:"
+
ee
.
getCode
());
}
else
if
(
e
instanceof
DisableLoginException
)
{
// 如果是被封禁异常
DisableLoginException
ee
=
(
DisableLoginException
)
e
;
aj
=
AjaxJson
.
getNotJur
(
"账号被封禁:"
+
ee
.
getDisableTime
()
+
"秒后解封"
);
}
else
{
// 普通异常, 输出:500 + 异常信息
aj
=
AjaxJson
.
getError
(
e
.
getMessage
());
}
// 返回给前端
return
aj
;
}
}
\ No newline at end of file
src/main/java/com/tianyan/auc/exception/SaTokenFilterExceptionHandler.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
exception
;
import
cn.dev33.satoken.filter.SaFilterErrorStrategy
;
import
com.tianyan.auc.common.AjaxJson
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.core.annotation.Order
;
/**
* 网关统一异常处理
*
* @author sun.zy
*/
@Order
(-
1
)
@Configuration
public
class
SaTokenFilterExceptionHandler
implements
SaFilterErrorStrategy
{
@Override
public
Object
run
(
Throwable
e
)
{
System
.
out
.
println
(
"---------- 进入Sa-Token异常处理 -----------"
);
return
AjaxJson
.
getError
(
e
.
getMessage
());
}
}
\ No newline at end of file
src/main/java/com/tianyan/auc/service/CardService.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
;
/**
* @author PHY
* @date 2022/5/6$-19:01
*/
public
interface
CardService
{
}
src/main/java/com/tianyan/auc/service/CountService.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
;
/**
* @author PHY
* @date 2022/5/6$-18:59
*/
public
interface
CountService
{
}
src/main/java/com/tianyan/auc/service/EmailService.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
;
/**
* @author PHY
* @date 2022/5/6$-14:12
*/
public
interface
EmailService
{
void
saveUser
(
String
type
);
}
src/main/java/com/tianyan/auc/service/PhoneService.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
;
/**
* @author PHY
* @date 2022/5/6$-14:01
* 各个service定制操作
*/
public
interface
PhoneService
{
String
selectUserByPhone
(
String
phone
);
}
src/main/java/com/tianyan/auc/service/UserHandle.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
;
/**
* @author PHY
* @date 2022/5/6$-16:15
*/
public
interface
UserHandle
{
/**
* 登录使用,前端为我们提供两个参数 需要后台自己解析,是什么,后台预设了
*/
UserHandle
getServiceType
(
String
type
);
/**
* 无论哪种登录方式都是要查询user用户的,几种预设登陆的通用方法
* P--- phone 手机号登陆
* E--- Email
* C--- Id_card 身份证号
* C--- count 账号登录
*/
String
selectUserByPECC
(
String
code
);
}
src/main/java/com/tianyan/auc/service/impl/CardServiceImpl.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
.
impl
;
import
com.tianyan.auc.service.CardService
;
import
com.tianyan.auc.service.UserHandle
;
import
org.springframework.stereotype.Service
;
/**
* @author PHY
* @date 2022/5/6$-19:01
*/
@Service
(
"cardService"
)
public
class
CardServiceImpl
implements
CardService
,
UserHandle
{
@Override
public
UserHandle
getServiceType
(
String
type
)
{
return
null
;
}
@Override
public
String
selectUserByPECC
(
String
code
)
{
return
null
;
}
}
src/main/java/com/tianyan/auc/service/impl/CountServiceImpl.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
.
impl
;
import
com.tianyan.auc.common.SpringUtils
;
import
com.tianyan.auc.common.TypeServiceEnum
;
import
com.tianyan.auc.service.CountService
;
import
com.tianyan.auc.service.UserHandle
;
import
org.springframework.stereotype.Service
;
/**
* @author PHY
* @date 2022/5/6$-19:00
*/
@Service
(
"countService"
)
public
class
CountServiceImpl
implements
CountService
,
UserHandle
{
@Override
public
UserHandle
getServiceType
(
String
type
)
{
return
SpringUtils
.
getBean
(
TypeServiceEnum
.
getTypeService
(
type
));
}
@Override
public
String
selectUserByPECC
(
String
code
)
{
return
null
;
}
}
src/main/java/com/tianyan/auc/service/impl/EmailServiceImpl.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
.
impl
;
import
com.tianyan.auc.common.SpringUtils
;
import
com.tianyan.auc.common.TypeServiceEnum
;
import
com.tianyan.auc.service.EmailService
;
import
com.tianyan.auc.service.UserHandle
;
import
org.springframework.stereotype.Service
;
/**
* @author PHY
* @date 2022/5/6$-14:13
*/
@Service
(
value
=
"emailService"
)
public
class
EmailServiceImpl
implements
EmailService
,
UserHandle
{
@Override
public
String
selectUserByPECC
(
String
code
)
{
return
null
;
}
@Override
public
void
saveUser
(
String
type
)
{
}
@Override
public
UserHandle
getServiceType
(
String
type
)
{
return
SpringUtils
.
getBean
(
TypeServiceEnum
.
getTypeService
(
type
));
}
}
src/main/java/com/tianyan/auc/service/impl/PhoneServiceImpl.java
0 → 100644
View file @
a9adc66d
package
com
.
tianyan
.
auc
.
service
.
impl
;
import
com.tianyan.auc.common.SpringUtils
;
import
com.tianyan.auc.common.TypeServiceEnum
;
import
com.tianyan.auc.service.PhoneService
;
import
com.tianyan.auc.service.UserHandle
;
import
org.springframework.context.annotation.Primary
;
import
org.springframework.stereotype.Service
;
/**
* @author PHY
* @date 2022/5/6$-14:02
*/
@Service
(
value
=
"phoneService"
)
@Primary
public
class
PhoneServiceImpl
implements
PhoneService
,
UserHandle
{
@Override
public
UserHandle
getServiceType
(
String
type
)
{
return
SpringUtils
.
getBean
(
TypeServiceEnum
.
getTypeService
(
type
));
}
@Override
public
String
selectUserByPhone
(
String
phone
)
{
return
null
;
}
@Override
public
String
selectUserByPECC
(
String
code
)
{
return
null
;
}
}
src/main/resources/application.yml
0 → 100644
View file @
a9adc66d
server
:
# 端口
port
:
8081
# Sa-Token配置
sa-token
:
# token名称 (同时也是cookie名称)
token-name
:
satoken
# token有效期,单位s 默认30天, -1代表永不过期
timeout
:
10000
# token临时有效期 (指定时间内无操作就视为token过期) 单位: 秒
activity-timeout
:
-1
# 是否允许同一账号并发登录 (为true时允许一起登录, 为false时新登录挤掉旧登录)
is-concurrent
:
true
# 在多人登录同一账号时,是否共用一个token (为true时所有登录共用一个token, 为false时每次登录新建一个token)
is-share
:
false
# 是否输出操作日志
is-log
:
false
# 是否在初始化配置时打印版本字符画
isPrint
:
false
# jwt秘钥
jwt-secret-key
:
asdasdasifhueuiwyurfewbfjsdafjk
# token前缀 需要放在header中不能放在cookie中
# token-prefix: Bearer
spring
:
application
:
name
:
lingyan
datasource
:
type
:
com.zaxxer.hikari.HikariDataSource
driver-class-name
:
com.mysql.jdbc.Driver
url
:
jdbc:mysql://127.0.0.1:3306/lingyan?characterEncoding=utf-8&useSSL=false
username
:
root
password
:
root
hikari
:
connection-test-query
:
SELECT 1
connection-timeout
:
60000
idle-timeout
:
500000
max-lifetime
:
540000
maximum-pool-size
:
12
minimum-idle
:
10
pool-name
:
GuliHikariPool
jackson
:
date-format
:
yyyy-MM-dd HH:mm:ss
time-zone
:
GMT+8
# mybatis-plus
mybatis-plus
:
mapper-locations
:
classpath:mapper/**/*.xml
#实体扫描,多个package用逗号或者分号分隔
typeAliasesPackage
:
com.tianyan.auc.domain.*
global-config
:
#数据库相关配置
db-config
:
#主键类型 AUTO:"数据库ID自增", INPUT:"用户输入ID", ID_WORKER:"全局唯一ID (数字类型唯一ID)", UUID:"全局唯一ID UUID";
id-type
:
UUID
logic-delete-field
:
del_tag
logic-delete-value
:
1
# 逻辑已删除值(默认为 1)
logic-not-delete-value
:
0
# 逻辑未删除值(默认为 0)
banner
:
false
#原生配置
configuration
:
map-underscore-to-camel-case
:
true
cache-enabled
:
false
call-setters-on-nulls
:
true
jdbc-type-for-null
:
'
null'
# 不校验白名单
ignore
:
whites
:
-
/tianyan/business/registerApp
-
/auth/login
-
/auth/app_login
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