Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
K
know-base
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
张京坤
know-base
Commits
0c53a315
提交
0c53a315
authored
1月 05, 2024
作者:
obcy
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
添加第三方认证
上级
290ef66d
显示空白字符变更
内嵌
并排
正在显示
5 个修改的文件
包含
217 行增加
和
1 行删除
+217
-1
KnowInterceptor.java
...com/zzsn/knowbase/config/interceptor/KnowInterceptor.java
+70
-0
WebMvcConfig.java
...va/com/zzsn/knowbase/config/interceptor/WebMvcConfig.java
+20
-0
KbAuthorizedUserService.java
...va/com/zzsn/knowbase/service/KbAuthorizedUserService.java
+2
-0
KbAuthorizedUserServiceImpl.java
...sn/knowbase/service/impl/KbAuthorizedUserServiceImpl.java
+3
-1
SpringContextUtils.java
src/main/java/com/zzsn/knowbase/util/SpringContextUtils.java
+122
-0
没有找到文件。
src/main/java/com/zzsn/knowbase/config/interceptor/KnowInterceptor.java
0 → 100644
浏览文件 @
0c53a315
package
com
.
zzsn
.
knowbase
.
config
.
interceptor
;
import
cn.hutool.core.date.DateUtil
;
import
com.alibaba.fastjson.JSON
;
import
com.zzsn.knowbase.service.KbAuthorizedUserService
;
import
com.zzsn.knowbase.util.SpringContextUtils
;
import
com.zzsn.knowbase.vo.Result
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.web.servlet.HandlerInterceptor
;
import
org.springframework.web.servlet.ModelAndView
;
import
javax.servlet.http.HttpServletRequest
;
import
javax.servlet.http.HttpServletResponse
;
import
java.io.IOException
;
import
java.io.PrintWriter
;
import
java.util.Date
;
import
java.util.HashMap
;
import
java.util.Map
;
/**
* @Description: 拦截所有的请求,对请求进行第三方系统认证
* @Author: obcy
* @Date: 2024/1/5
*/
@Slf4j
public
class
KnowInterceptor
implements
HandlerInterceptor
{
@Override
public
boolean
preHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
)
throws
Exception
{
// 在请求处理之前进行调用(Controller方法调用之前)
// 返回true才会继续执行后续的Interceptor和Controller
// 返回false则取消当前请求
String
token
=
request
.
getHeader
(
"X-Access-Token"
);
KbAuthorizedUserService
userService
=
SpringContextUtils
.
getBean
(
KbAuthorizedUserService
.
class
);
Result
<?>
result
=
userService
.
doCheck
(
token
);
/**第三方用户验证未通过,直接拦截请求并返回提示*/
if
(!
result
.
isSuccess
()){
doRes
(
request
,
response
);
return
false
;
}
return
true
;
}
@Override
public
void
postHandle
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
ModelAndView
modelAndView
)
throws
Exception
{
// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
}
@Override
public
void
afterCompletion
(
HttpServletRequest
request
,
HttpServletResponse
response
,
Object
handler
,
Exception
ex
)
throws
Exception
{
// 整个请求结束之后被调用,也就是在DispatcherServlet渲染了对应的视图之后执行(主要进行资源清理工作)
}
public
void
doRes
(
HttpServletRequest
request
,
HttpServletResponse
response
)
throws
IOException
{
response
.
setStatus
(
550
);
response
.
setContentType
(
"application/json;charset=UTF-8"
);
Map
<
String
,
Object
>
map
=
new
HashMap
<>();
map
.
put
(
"timestamp"
,
DateUtil
.
formatDateTime
(
new
Date
()));
map
.
put
(
"status"
,
500
);
map
.
put
(
"error"
,
"Internal Server Error"
);
map
.
put
(
"message"
,
"第三方用户验证未通过,请检查令牌是否正确"
);
map
.
put
(
"path"
,
request
.
getRequestURI
());
String
res
=
JSON
.
toJSONString
(
map
);
PrintWriter
writer
=
response
.
getWriter
();
writer
.
write
(
JSON
.
toJSONString
(
map
));
writer
.
flush
();
log
.
error
(
"拦截请求:{}"
,
res
);
}
}
src/main/java/com/zzsn/knowbase/config/interceptor/WebMvcConfig.java
0 → 100644
浏览文件 @
0c53a315
package
com
.
zzsn
.
knowbase
.
config
.
interceptor
;
import
org.springframework.context.annotation.Configuration
;
import
org.springframework.web.servlet.config.annotation.InterceptorRegistry
;
import
org.springframework.web.servlet.config.annotation.WebMvcConfigurer
;
/**
* @Description:
* @Author: obcy
* @Date: 2024/4/5
*/
@Configuration
public
class
WebMvcConfig
implements
WebMvcConfigurer
{
@Override
public
void
addInterceptors
(
InterceptorRegistry
registry
)
{
// 添加自定义拦截器,拦截所有路径
registry
.
addInterceptor
(
new
KnowInterceptor
()).
addPathPatterns
(
"/**"
);
}
}
src/main/java/com/zzsn/knowbase/service/KbAuthorizedUserService.java
浏览文件 @
0c53a315
...
@@ -23,4 +23,6 @@ public interface KbAuthorizedUserService extends IService<KbAuthorizedUser> {
...
@@ -23,4 +23,6 @@ public interface KbAuthorizedUserService extends IService<KbAuthorizedUser> {
Result
<?>
userPermission
(
String
token
);
Result
<?>
userPermission
(
String
token
);
Result
<?>
thirdpartyUsers
(
String
token
);
Result
<?>
thirdpartyUsers
(
String
token
);
Result
<?>
doCheck
(
String
token
);
}
}
src/main/java/com/zzsn/knowbase/service/impl/KbAuthorizedUserServiceImpl.java
浏览文件 @
0c53a315
...
@@ -170,7 +170,9 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
...
@@ -170,7 +170,9 @@ public class KbAuthorizedUserServiceImpl extends ServiceImpl<KbAuthorizedUserMap
return
Result
.
OK
(
list
);
return
Result
.
OK
(
list
);
}
}
private
Result
<?>
doCheck
(
String
token
)
{
@Override
public
Result
<?>
doCheck
(
String
token
)
{
String
body
=
HttpRequest
.
post
(
checkuserurl
).
header
(
"X-Access-Token"
,
token
).
execute
().
body
();
String
body
=
HttpRequest
.
post
(
checkuserurl
).
header
(
"X-Access-Token"
,
token
).
execute
().
body
();
Result
bean
=
JSONUtil
.
toBean
(
body
,
Result
.
class
);
Result
bean
=
JSONUtil
.
toBean
(
body
,
Result
.
class
);
return
bean
;
return
bean
;
...
...
src/main/java/com/zzsn/knowbase/util/SpringContextUtils.java
0 → 100644
浏览文件 @
0c53a315
package
com
.
zzsn
.
knowbase
.
util
;
import
cn.hutool.core.util.ObjectUtil
;
import
lombok.extern.slf4j.Slf4j
;
import
org.springframework.beans.BeansException
;
import
org.springframework.beans.factory.support.BeanDefinitionBuilder
;
import
org.springframework.beans.factory.support.BeanDefinitionRegistry
;
import
org.springframework.beans.factory.support.GenericBeanDefinition
;
import
org.springframework.context.ApplicationContext
;
import
org.springframework.context.ApplicationContextAware
;
import
org.springframework.context.ConfigurableApplicationContext
;
import
org.springframework.stereotype.Component
;
/**
* @Description: spring容器取bean的工具类;
* @Author: obcy
* @Date: 2024/1/5
*/
@Component
@Slf4j
public
class
SpringContextUtils
implements
ApplicationContextAware
{
private
static
ApplicationContext
applicationContext
=
null
;
@Override
public
void
setApplicationContext
(
ApplicationContext
applicationContext
)
throws
BeansException
{
if
(
SpringContextUtils
.
applicationContext
==
null
)
{
SpringContextUtils
.
applicationContext
=
applicationContext
;
}
}
/**
* @apiNote 获取applicationContext
*/
public
static
ApplicationContext
getApplicationContext
()
{
return
applicationContext
;
}
/**
* @apiNote 通过name获取 Bean.
*/
public
static
Object
getBean
(
String
name
)
{
return
getApplicationContext
().
getBean
(
name
);
}
/**
* @apiNote 通过class获取Bean.
*/
public
static
<
T
>
T
getBean
(
Class
<
T
>
clazz
)
{
return
getApplicationContext
().
getBean
(
clazz
);
}
/**
* @apiNote 通过name, 以及Clazz返回指定的Bean
*/
public
static
<
T
>
T
getBean
(
String
name
,
Class
<
T
>
clazz
)
{
return
getApplicationContext
().
getBean
(
name
,
clazz
);
}
/**
* 注册一个bean到spring容器中
* @param beanName bean的name
* @param clazz bean对应的class类,实际他会根据这个类来反射生成对象
* @param args 如果class类对应的有 有参的构造器
* @param <T> 返回这个bean的对象
* @return
*/
public
static
<
T
>
T
registerBean
(
String
beanName
,
Class
<
T
>
clazz
,
Object
...
args
)
{
if
(
applicationContext
.
containsBean
(
beanName
))
{
Object
bean
=
applicationContext
.
getBean
(
beanName
);
Class
<?>
aClass
=
bean
.
getClass
();
/**
* 解释可以参考jdk Class类的原文翻译——想了解的自己去翻译
* 也就是判断当前的Class对象所表示的类,是不是参数中传递的Class对象所表示的类的父类,接口,
* 或者是相同的类型。是则返回true,否则返回false。
* 这里,bean.getClass(),只要在spring容器里的,都是基于spring给创建的代理类,也就是cglib;
* 那么肯定符合子类这条,反过来就不行了
*/
if
(
clazz
.
isAssignableFrom
(
bean
.
getClass
()))
{
return
(
T
)
bean
;
}
else
{
throw
new
RuntimeException
(
"BeanName 重复:"
+
beanName
);
}
}
BeanDefinitionBuilder
beanDefinitionBuilder
=
BeanDefinitionBuilder
.
genericBeanDefinition
(
clazz
);
if
(
ObjectUtil
.
isNotEmpty
(
args
))
{
for
(
Object
arg
:
args
)
{
beanDefinitionBuilder
.
addConstructorArgValue
(
arg
);
}
}
GenericBeanDefinition
beanDefinition
=
(
GenericBeanDefinition
)
beanDefinitionBuilder
.
getRawBeanDefinition
();
beanDefinition
.
setBeanClass
(
clazz
);
beanDefinition
.
setAutowireMode
(
GenericBeanDefinition
.
AUTOWIRE_BY_NAME
);
ConfigurableApplicationContext
context
=
null
;
if
(
applicationContext
instanceof
ConfigurableApplicationContext
){
context
=
(
ConfigurableApplicationContext
)
applicationContext
;
}
BeanDefinitionRegistry
beanFactory
=
(
BeanDefinitionRegistry
)
context
.
getBeanFactory
();
beanFactory
.
registerBeanDefinition
(
beanName
,
beanDefinition
);
return
applicationContext
.
getBean
(
beanName
,
clazz
);
}
/**
* 根据beanName删除掉spring容器中的对象
* @param beanName
*/
public
static
void
removeBean
(
String
beanName
)
{
ConfigurableApplicationContext
context
=
null
;
if
(
applicationContext
instanceof
ConfigurableApplicationContext
){
context
=
(
ConfigurableApplicationContext
)
applicationContext
;
}
BeanDefinitionRegistry
beanFactory
=
(
BeanDefinitionRegistry
)
context
.
getParentBeanFactory
();
//Object bean = applicationContext.getBean(beanName);
try
{
beanFactory
.
removeBeanDefinition
(
beanName
);
}
catch
(
Exception
e
){
log
.
error
(
"删除beanName:{}失败!"
,
beanName
);
}
}
}
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论