Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
O
oms-ci-test
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
test-ci
oms-ci-test
Commits
bab66b72
提交
bab66b72
authored
5月 29, 2023
作者:
张小凤
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
AuthFilter(add)
上级
0c1b8b2b
隐藏空白字符变更
内嵌
并排
正在显示
7 个修改的文件
包含
340 行增加
和
2 行删除
+340
-2
ResultEnum.java
src/main/java/com/mmc/oms/common/ResultEnum.java
+4
-1
Tenant.java
src/main/java/com/mmc/oms/common/Tenant.java
+80
-0
Audience.java
src/main/java/com/mmc/oms/config/Audience.java
+20
-0
TenantContext.java
src/main/java/com/mmc/oms/config/TenantContext.java
+64
-0
AuthFilter.java
src/main/java/com/mmc/oms/filter/AuthFilter.java
+20
-0
AuthSignatureFilter.java
src/main/java/com/mmc/oms/filter/AuthSignatureFilter.java
+151
-0
application-local.yml
src/main/resources/application-local.yml
+1
-1
没有找到文件。
src/main/java/com/mmc/oms/common/ResultEnum.java
浏览文件 @
bab66b72
...
@@ -395,7 +395,10 @@ public enum ResultEnum implements BaseErrorInfoInterface {
...
@@ -395,7 +395,10 @@ public enum ResultEnum implements BaseErrorInfoInterface {
HELP_FAIL_ERROR
(
"2009"
,
"不能给自己助力哦!"
),
HELP_FAIL_ERROR
(
"2009"
,
"不能给自己助力哦!"
),
ALREADY_BINDING_ERROR
(
"2010"
,
"优惠券已被绑定"
),
ALREADY_BINDING_ERROR
(
"2010"
,
"优惠券已被绑定"
),
ALREADY_DIVIDE_ERROR
(
"2011"
,
"订单已分成"
),
ALREADY_DIVIDE_ERROR
(
"2011"
,
"订单已分成"
),
DIVIDE_OBJ_NOT_EXIST
(
"2012"
,
"先点击确认添加分成对象"
);
DIVIDE_OBJ_NOT_EXIST
(
"2012"
,
"先点击确认添加分成对象"
),
THE_REQUEST_IS_NOT_AUTHENTICATED
(
"2013"
,
"请求未经过鉴权"
),
THE_TOKEN_IS_INVALID
(
"2014"
,
"token失效"
)
;
/**
/**
* 错误码
* 错误码
*
*
...
...
src/main/java/com/mmc/oms/common/Tenant.java
0 → 100644
浏览文件 @
bab66b72
package
com
.
mmc
.
oms
.
common
;
import
lombok.Data
;
import
java.io.Serializable
;
/**
* @Author small
* @Date 2023/5/28 17:32
* @Version 1.0
*/
@Data
public
class
Tenant
implements
Serializable
{
/**
* 用户id
*/
private
Integer
userId
;
/**
* 所在机构id
*/
private
Integer
tenantId
;
/**
* 用户名称
*/
private
String
userName
;
/**
* 管理机构id集合
*/
private
String
tenantIds
;
/**
* 菜单路由路径集合
*/
private
String
token
;
/**
* 角色id
*/
private
Integer
roleId
;
/**
* 角色类型,1超管 2其他角色
*/
private
Integer
roleType
;
public
Tenant
(
String
userName
)
{
this
.
userId
=
userId
;
this
.
tenantId
=
tenantId
;
this
.
userName
=
userName
;
this
.
tenantIds
=
tenantIds
;
this
.
token
=
token
;
this
.
roleId
=
roleId
;
this
.
roleType
=
roleType
;
}
/**
* userid相同,认为是同个用户
*
* @param o
* @return
*/
@Override
public
boolean
equals
(
Object
o
)
{
if
(
this
==
o
)
{
return
true
;
}
if
(
o
instanceof
Tenant
)
{
Tenant
tenant
=
(
Tenant
)
o
;
return
getUserId
().
equals
(
tenant
.
getUserId
());
}
else
{
return
false
;
}
}
@Override
public
int
hashCode
()
{
int
result
=
17
;
result
=
31
*
result
+
getUserId
().
hashCode
();
return
result
;
}
}
src/main/java/com/mmc/oms/config/Audience.java
0 → 100644
浏览文件 @
bab66b72
package
com
.
mmc
.
oms
.
config
;
import
lombok.Data
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.stereotype.Component
;
/**
* @Author small
* @Date 2023/5/28 17:04
* @Version 1.0
*/
@Data
@ConfigurationProperties
(
prefix
=
"audience"
)
@Component
public
class
Audience
{
private
String
clientId
;
private
String
base64Secret
;
private
String
name
;
private
long
expiresSecond
;
}
src/main/java/com/mmc/oms/config/TenantContext.java
0 → 100644
浏览文件 @
bab66b72
package
com
.
mmc
.
oms
.
config
;
import
com.mmc.oms.common.Tenant
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.StringUtils
;
/**
* @Author small
* @Date 2023/5/28 17:18
* @Version 1.0
*/
@Slf4j
public
class
TenantContext
{
private
static
ThreadLocal
<
Tenant
>
tenantHolder
=
new
ThreadLocal
<>();
public
static
void
setTenant
(
Tenant
tenant
)
{
tenantHolder
.
set
(
tenant
);
}
public
static
Tenant
getTenant
()
{
return
tenantHolder
.
get
();
}
public
static
Integer
getUserId
()
{
return
getTenant
().
getUserId
();
}
public
static
Integer
getTenantId
()
{
return
getTenant
().
getTenantId
();
}
public
static
Integer
getRoleId
()
{
return
getTenant
().
getRoleId
();
}
public
static
boolean
exists
()
{
return
getTenant
()
!=
null
;
}
public
static
void
clear
()
{
tenantHolder
.
remove
();
}
public
static
Tenant
buildTenant
(
String
accountNo
)
{
if
(
StringUtils
.
isBlank
(
accountNo
))
{
log
.
error
(
"登录信息[accountNo]获取异常"
);
return
null
;
}
return
new
Tenant
(
accountNo
);
}
/**
* valid tenantId is correct
*/
private
static
boolean
validNumeric
(
String
number
)
{
return
StringUtils
.
isNotEmpty
(
number
)
&&
StringUtils
.
isNumeric
(
number
);
}
}
src/main/java/com/mmc/oms/filter/AuthFilter.java
0 → 100644
浏览文件 @
bab66b72
package
com
.
mmc
.
oms
.
filter
;
/**
* @Author small
* @Date 2023/5/28 17:02
* @Version 1.0
*/
import
javax.servlet.Filter
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
/** 登录认证 */
public
interface
AuthFilter
extends
Filter
{
/** 拦截前 */
public
boolean
before
(
HttpServletRequest
request
,
HttpServletResponse
response
);
/** 通过拦截后 */
public
boolean
after
();
}
src/main/java/com/mmc/oms/filter/AuthSignatureFilter.java
0 → 100644
浏览文件 @
bab66b72
package
com
.
mmc
.
oms
.
filter
;
import
com.alibaba.fastjson2.JSON
;
import
com.alibaba.fastjson2.JSONObject
;
import
com.mmc.oms.common.ResultBody
;
import
com.mmc.oms.common.ResultEnum
;
import
com.mmc.oms.common.Tenant
;
import
com.mmc.oms.config.Audience
;
import
com.mmc.oms.config.TenantContext
;
import
com.mmc.oms.model.dto.UserAccountDTO
;
import
io.jsonwebtoken.Claims
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.lang3.ArrayUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.StringRedisTemplate
;
import
org.springframework.stereotype.Component
;
import
javax.servlet.*
;
import
javax.servlet.annotation.WebFilter
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
/**
* @Author small
* @Date 2023/5/28 17:02
* @Version 1.0
*/
@Slf4j
@Component
@WebFilter
(
filterName
=
"AuthSignatureFilter"
,
urlPatterns
=
"/*"
)
public
class
AuthSignatureFilter
implements
AuthFilter
{
@Autowired
private
Audience
audience
;
@Autowired
private
StringRedisTemplate
stringRedisTemplate
;
/**
* 无需登录白名单
*/
private
static
final
String
[]
IGNORE_URLS
=
{
"/oms/swagger/swagger-resources"
,
"/oms/swagger/v2/api-docs"
,
"/oms/swagger/doc.html"
};
/*无需加密狗无需登录白名单*/
private
static
final
String
[]
USE_KEY
=
{
"/crm/account/loginByUsbKey"
};
/**
* 请求方式预请求方式值
*/
private
static
final
String
REQUEST_METHOD_OPTIONS_VALUE
=
"OPTIONS"
;
public
static
final
String
SWAGGER_URL_PREFIX
=
"/oms/swagger"
;
@Override
public
void
init
(
FilterConfig
filterConfig
)
{
log
.
info
(
" filter name is 'AuthSignatureFilter' init success"
);
}
/**
* 过滤器前置处理
*
* @param request
* @param response
* @return
*/
@Override
public
boolean
before
(
HttpServletRequest
request
,
HttpServletResponse
response
)
{
String
url
=
request
.
getRequestURI
();
// 忽略以下url请求,白名单路径以及swagger路径
if
(!
ArrayUtils
.
contains
(
IGNORE_URLS
,
url
)
&&
!
ArrayUtils
.
contains
(
USE_KEY
,
url
)
&&
!
url
.
startsWith
(
"/oms/webjars"
)
&&
!
url
.
startsWith
(
SWAGGER_URL_PREFIX
))
{
if
(
REQUEST_METHOD_OPTIONS_VALUE
.
equals
(
request
.
getMethod
()))
{
response
.
setStatus
(
HttpServletResponse
.
SC_OK
);
return
false
;
}
else
{
String
token
=
request
.
getHeader
(
"token"
);
if
(
null
==
token
){
response
(
response
,
ResultBody
.
error
(
ResultEnum
.
THE_REQUEST_IS_NOT_AUTHENTICATED
));
return
false
;
}
String
s
=
stringRedisTemplate
.
opsForValue
().
get
(
token
);
if
(
null
==
s
){
response
(
response
,
ResultBody
.
error
(
ResultEnum
.
THE_TOKEN_IS_INVALID
));
return
false
;
}
UserAccountDTO
userAccountDTO
=
JSON
.
parseObject
(
s
,
UserAccountDTO
.
class
);
try
{
Tenant
tenant
=
TenantContext
.
buildTenant
(
userAccountDTO
.
getAccountNo
());
if
(
tenant
!=
null
){
TenantContext
.
setTenant
(
tenant
);
return
true
;
}
}
catch
(
Exception
e
)
{
e
.
printStackTrace
();
}
}
}
return
true
;
}
@Override
public
void
doFilter
(
ServletRequest
req
,
ServletResponse
res
,
FilterChain
chain
)
throws
IOException
,
ServletException
{
final
HttpServletRequest
request
=
(
HttpServletRequest
)
req
;
final
HttpServletResponse
response
=
(
HttpServletResponse
)
res
;
if
(!
before
(
request
,
response
))
{
return
;
}
chain
.
doFilter
(
req
,
res
);
after
();
}
/**
* 过滤器后置处理
*
* @return
*/
@Override
public
boolean
after
()
{
TenantContext
.
clear
();
// 上下文清理
return
true
;
}
private
static
final
String
APPLICATION_JSON_UTF8
=
"application/json;charset=UTF-8"
;
public
static
void
response
(
HttpServletResponse
response
,
ResultBody
resultBody
)
{
response
.
setContentType
(
APPLICATION_JSON_UTF8
);
try
{
response
.
getWriter
()
.
write
(
JSON
.
toJSONString
(
ResultBody
.
error
(
resultBody
.
getCode
(),
resultBody
.
getMessage
())));
}
catch
(
IOException
e
)
{
log
.
error
(
e
.
getMessage
());
}
}
private
static
String
toString
(
Object
obj
)
{
if
(
null
==
obj
)
{
return
""
;
}
return
obj
.
toString
();
}
@Override
public
void
destroy
()
{
}
}
src/main/resources/application-local.yml
浏览文件 @
bab66b72
...
@@ -6,7 +6,7 @@ spring:
...
@@ -6,7 +6,7 @@ spring:
username
:
tmj
username
:
tmj
password
:
MMC@2022&MYSQL
password
:
MMC@2022&MYSQL
redis
:
redis
:
database
:
0
database
:
1
host
:
r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
host
:
r-wz9ke310fs684hacn1pd.redis.rds.aliyuncs.com
port
:
6379
port
:
6379
password
:
MMC@2022&REDIS
password
:
MMC@2022&REDIS
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论