Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wecloud_im_server
Overview
Overview
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
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
hewei
wecloud_im_server
Commits
b66930c6
Commit
b66930c6
authored
Sep 24, 2020
by
giaogiao
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
1.修改swagger分模块
2.修改权限相关
parent
82168ad8
Show whitespace changes
Inline
Side-by-side
Showing
18 changed files
with
708 additions
and
146 deletions
+708
-146
README.md
+11
-1
api-app/src/main/java/com/jumeirah/api/app/controller/AppHelloWorldController.java
+2
-2
api-app/src/main/java/com/jumeirah/api/app/controller/AppUserController.java
+1
-1
bootstrap/src/main/java/io/geekidea/springbootplus/config/ShiroConfig.java
+47
-12
bootstrap/src/main/java/io/geekidea/springbootplus/config/Swagger2Config.java
+77
-4
common/src/main/java/com/jumeirah/common/service/impl/SysLoginServiceImpl.java
+2
-2
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/AppLoginRedisService.java
+1
-1
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/MerchantLoginRedisService.java
+98
-0
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/SysLoginRedisService.java
+98
-0
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/AppLoginRedisServiceImpl.java
+175
-0
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/MerchantLoginRedisServiceImpl.java
+175
-0
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/SysLoginRedisServiceImpl.java
+2
-2
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/JwtFilter.java
+3
-3
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/JwtRealmSystem.java
+0
-104
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/realm/JwtRealmAppUser.java
+3
-3
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/realm/JwtRealmMerchant.java
+5
-4
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/realm/JwtRealmSystem.java
+6
-5
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/service/impl/ShiroLoginServiceImpl.java
+2
-2
No files found.
README.md
View file @
b66930c6
...
...
@@ -73,7 +73,17 @@ api-system api-app api-merchant
## 权限验证
使用shiro框架
Shiro 的核心:
Subject(主体): 用于记录当前的操作用户,Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授权,而subject是通过SecurityManager安全管理器进行认证授权
SecurityManager(安全管理器):对Subject 进行管理,他是shiro的核心SecurityManager是一个接口,继承了Authenticator, Authorizer, SessionManager这三个接口。
Authenticator(认证器):对用户身份进行认证
Authorizer(授权器):用户通过认证后,来判断时候拥有该权限
realm:获取用户权限数据
sessionManager(会话管理):shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。
CacheManager(缓存管理器):将用户权限数据存储在缓存,这样可以提高性能。
authc:所有url都必须认证通过才可以访问;
...
...
api-app/src/main/java/com/jumeirah/api/app/controller/AppHelloWorldController.java
View file @
b66930c6
...
...
@@ -39,7 +39,7 @@ public class AppHelloWorldController {
@GetMapping
(
value
=
"/needRole"
)
@OperationLog
(
name
=
"
helloWorld
"
)
@OperationLog
(
name
=
"
needRole
"
)
@ApiOperation
(
value
=
"Hello World"
,
response
=
String
.
class
)
public
ApiResult
<
String
>
needRole
()
throws
IOException
{
log
.
debug
(
"Hello World...app"
);
...
...
@@ -47,7 +47,7 @@ public class AppHelloWorldController {
}
@GetMapping
(
value
=
"/noRole"
)
@OperationLog
(
name
=
"
helloWorld
"
)
@OperationLog
(
name
=
"
noRole
"
)
@ApiOperation
(
value
=
"Hello World"
,
response
=
String
.
class
)
public
ApiResult
<
String
>
noRole
()
throws
IOException
{
log
.
debug
(
"Hello World...app"
);
...
...
api-app/src/main/java/com/jumeirah/api/app/controller/AppUserController.java
View file @
b66930c6
...
...
@@ -38,7 +38,7 @@ import javax.servlet.http.HttpServletResponse;
@Slf4j
@RestController
//@Module("api-app")
@Api
(
value
=
"用户API"
,
tags
=
{
"APP相关"
})
@Api
(
value
=
"用户API"
,
tags
=
{
"APP
用户
相关"
})
@RequestMapping
(
"/app/user/"
)
public
class
AppUserController
extends
BaseController
{
...
...
bootstrap/src/main/java/io/geekidea/springbootplus/config/ShiroConfig.java
View file @
b66930c6
...
...
@@ -20,11 +20,15 @@ import com.alibaba.fastjson.JSON;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.config.properties.ShiroPermissionProperties
;
import
io.geekidea.springbootplus.config.properties.ShiroProperties
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.MerchantLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.SysLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.exception.ShiroConfigException
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtCredentialsMatcher
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtFilter
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtRealm
;
import
io.geekidea.springbootplus.framework.shiro.jwt.realm.JwtRealmAppUser
;
import
io.geekidea.springbootplus.framework.shiro.jwt.realm.JwtRealmMerchant
;
import
io.geekidea.springbootplus.framework.shiro.jwt.realm.JwtRealmSystem
;
import
io.geekidea.springbootplus.framework.shiro.service.ShiroLoginService
;
import
io.geekidea.springbootplus.framework.util.IniUtil
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -41,6 +45,7 @@ import org.apache.shiro.mgt.DefaultSessionStorageEvaluator;
import
org.apache.shiro.mgt.DefaultSubjectDAO
;
import
org.apache.shiro.mgt.SecurityManager
;
import
org.apache.shiro.mgt.SessionStorageEvaluator
;
import
org.apache.shiro.realm.Realm
;
import
org.apache.shiro.spring.LifecycleBeanPostProcessor
;
import
org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor
;
import
org.apache.shiro.spring.web.ShiroFilterFactoryBean
;
...
...
@@ -103,13 +108,41 @@ public class ShiroConfig {
}
/**
*
JWT数据源验证
*
系统的用户及权限数据
*
* @return
*/
@Bean
public
JwtRealm
jwtRealm
(
LoginRedisService
loginRedisService
)
{
JwtRealm
jwtRealm
=
new
JwtRealm
(
loginRedisService
);
public
JwtRealmSystem
jwtRealmSystem
(
SysLoginRedisService
loginRedisService
)
{
JwtRealmSystem
jwtRealm
=
new
JwtRealmSystem
(
loginRedisService
);
jwtRealm
.
setCachingEnabled
(
false
);
jwtRealm
.
setCredentialsMatcher
(
credentialsMatcher
());
return
jwtRealm
;
}
/**
* app的用户及权限数据
*
* @return
*/
@Bean
public
JwtRealmAppUser
jwtRealmAppUser
(
AppLoginRedisService
appLoginRedisService
)
{
JwtRealmAppUser
jwtRealm
=
new
JwtRealmAppUser
(
appLoginRedisService
);
jwtRealm
.
setCachingEnabled
(
false
);
jwtRealm
.
setCredentialsMatcher
(
credentialsMatcher
());
return
jwtRealm
;
}
/**
* 商家的用户及权限数据
*
* @return
*/
@Bean
public
JwtRealmMerchant
jwtRealmSystem
(
MerchantLoginRedisService
merchantLoginRedisService
)
{
JwtRealmMerchant
jwtRealm
=
new
JwtRealmMerchant
(
merchantLoginRedisService
);
jwtRealm
.
setCachingEnabled
(
false
);
jwtRealm
.
setCredentialsMatcher
(
credentialsMatcher
());
return
jwtRealm
;
...
...
@@ -146,10 +179,10 @@ public class ShiroConfig {
* @return
*/
@Bean
public
SecurityManager
securityManager
(
LoginRedisService
loginRedisService
)
{
public
SecurityManager
securityManager
(
Sys
LoginRedisService
loginRedisService
)
{
DefaultWebSecurityManager
securityManager
=
new
DefaultWebSecurityManager
();
// 数据连接器
securityManager
.
setRealm
(
jwtRealm
(
loginRedisService
));
securityManager
.
setRealm
(
jwtRealm
System
(
loginRedisService
));
// 设置session存储方式: 不使用sessionId保存
securityManager
.
setSubjectDAO
(
subjectDAO
());
SecurityUtils
.
setSecurityManager
(
securityManager
);
...
...
@@ -168,7 +201,7 @@ public class ShiroConfig {
@Bean
(
SHIRO_FILTER_NAME
)
public
ShiroFilterFactoryBean
shiroFilterFactoryBean
(
SecurityManager
securityManager
,
ShiroLoginService
shiroLoginService
,
LoginRedisService
loginRedisService
,
Sys
LoginRedisService
loginRedisService
,
ShiroProperties
shiroProperties
,
JwtProperties
jwtProperties
)
{
ShiroFilterFactoryBean
shiroFilterFactoryBean
=
new
ShiroFilterFactoryBean
();
...
...
@@ -191,7 +224,7 @@ public class ShiroConfig {
* @return
*/
private
Map
<
String
,
Filter
>
getFilterMap
(
ShiroLoginService
shiroLoginService
,
LoginRedisService
loginRedisService
,
Sys
LoginRedisService
loginRedisService
,
JwtProperties
jwtProperties
)
{
Map
<
String
,
Filter
>
filterMap
=
new
LinkedHashMap
<>();
filterMap
.
put
(
JWT_FILTER_NAME
,
new
JwtFilter
(
shiroLoginService
,
loginRedisService
,
jwtProperties
));
...
...
@@ -314,13 +347,15 @@ public class ShiroConfig {
/**
* 认证模式
*
* @param
l
oginRedisService
* @param
sysL
oginRedisService
* @return
*/
@Bean
public
Authenticator
authenticator
(
LoginRedisService
l
oginRedisService
)
{
public
Authenticator
authenticator
(
SysLoginRedisService
sysL
oginRedisService
)
{
ModularRealmAuthenticator
authenticator
=
new
ModularRealmAuthenticator
();
authenticator
.
setRealms
(
Arrays
.
asList
(
jwtRealm
(
loginRedisService
)));
List
<
Realm
>
realms
=
new
ArrayList
<>();
realms
.
add
(
jwtRealmSystem
(
sysLoginRedisService
));
authenticator
.
setRealms
(
realms
);
// 认证策略: 第一个成功
authenticator
.
setAuthenticationStrategy
(
new
FirstSuccessfulStrategy
());
return
authenticator
;
...
...
bootstrap/src/main/java/io/geekidea/springbootplus/config/Swagger2Config.java
View file @
b66930c6
...
...
@@ -72,6 +72,7 @@ import static springfox.documentation.swagger.schema.ApiModelProperties.findApiM
/**
* Swagger2全局配置
* 分组教程 https://sns.bladex.vip/q-342.html
*
* @author geekidea
* @date 2020/3/21
...
...
@@ -128,12 +129,60 @@ public class Swagger2Config {
return
Optional
.
fromNullable
(
input
.
declaringClass
());
}
// @Bean
// public Docket createRestApi() {
// // 获取需要扫描的包
// String[] basePackages = getBasePackages();
// ApiSelectorBuilder apiSelectorBuilder = new Docket(DocumentationType.SWAGGER_2)
// .apiInfo(apiInfo("默认", "1.0"))
// .select();
// // 如果扫描的包为空,则默认扫描类上有@Api注解的类
// if (ArrayUtils.isEmpty(basePackages)) {
// apiSelectorBuilder.apis(RequestHandlerSelectors.withClassAnnotation(Api.class));
// } else {
// // 扫描指定的包
// apiSelectorBuilder.apis(basePackage(basePackages));
// }
// Docket docket = apiSelectorBuilder.paths(PathSelectors.any())
// .build()
// .enable(swaggerProperties.isEnable())
// .ignoredParameterTypes(ignoredParameterTypes)
// .globalOperationParameters(getParameters());
// return docket;
// }
@Bean
public
Docket
restAppApi
()
{
// 获取需要扫描的包
String
[]
basePackages
=
{
"com.jumeirah.api.app.controller"
};
ApiSelectorBuilder
apiSelectorBuilder
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
(
"默认"
,
"1.0"
))
.
groupName
(
"app"
)
.
select
();
// 如果扫描的包为空,则默认扫描类上有@Api注解的类
if
(
ArrayUtils
.
isEmpty
(
basePackages
))
{
apiSelectorBuilder
.
apis
(
RequestHandlerSelectors
.
withClassAnnotation
(
Api
.
class
));
}
else
{
// 扫描指定的包
apiSelectorBuilder
.
apis
(
basePackage
(
basePackages
));
}
Docket
docket
=
apiSelectorBuilder
.
paths
(
PathSelectors
.
any
())
.
build
()
.
enable
(
swaggerProperties
.
isEnable
())
.
ignoredParameterTypes
(
ignoredParameterTypes
)
.
globalOperationParameters
(
getParameters
());
return
docket
;
}
@Bean
public
Docket
createRest
Api
()
{
public
Docket
restSys
Api
()
{
// 获取需要扫描的包
String
[]
basePackages
=
getBasePackages
()
;
String
[]
basePackages
=
{
"com.jumeirah.api.system.controlle"
}
;
ApiSelectorBuilder
apiSelectorBuilder
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
())
.
apiInfo
(
apiInfo
(
"默认"
,
"1.0"
))
.
groupName
(
"system"
)
.
select
();
// 如果扫描的包为空,则默认扫描类上有@Api注解的类
if
(
ArrayUtils
.
isEmpty
(
basePackages
))
{
...
...
@@ -150,12 +199,36 @@ public class Swagger2Config {
return
docket
;
}
@Bean
public
Docket
restMerchantApi
()
{
// 获取需要扫描的包
String
[]
basePackages
=
{
"com.jumeirah.api.merchant.controller"
};
ApiSelectorBuilder
apiSelectorBuilder
=
new
Docket
(
DocumentationType
.
SWAGGER_2
)
.
apiInfo
(
apiInfo
(
"默认"
,
"1.0"
))
.
groupName
(
"merchant"
)
.
select
();
// 如果扫描的包为空,则默认扫描类上有@Api注解的类
if
(
ArrayUtils
.
isEmpty
(
basePackages
))
{
apiSelectorBuilder
.
apis
(
RequestHandlerSelectors
.
withClassAnnotation
(
Api
.
class
));
}
else
{
// 扫描指定的包
apiSelectorBuilder
.
apis
(
basePackage
(
basePackages
));
}
Docket
docket
=
apiSelectorBuilder
.
paths
(
PathSelectors
.
any
())
.
build
()
.
enable
(
swaggerProperties
.
isEnable
())
.
ignoredParameterTypes
(
ignoredParameterTypes
)
.
globalOperationParameters
(
getParameters
());
return
docket
;
}
/**
* 获取apiInfo
*
* @return
*/
private
ApiInfo
apiInfo
()
{
private
ApiInfo
apiInfo
(
String
title
,
String
version
)
{
return
new
ApiInfoBuilder
()
.
title
(
swaggerProperties
.
getTitle
())
.
description
(
swaggerProperties
.
getDescription
())
...
...
common/src/main/java/com/jumeirah/common/service/impl/SysLoginServiceImpl.java
View file @
b66930c6
...
...
@@ -30,7 +30,7 @@ import io.geekidea.springbootplus.config.properties.JwtProperties;
import
io.geekidea.springbootplus.config.properties.SpringBootPlusProperties
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.
Sys
LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtTokenUtil
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
...
...
@@ -78,7 +78,7 @@ public class SysLoginServiceImpl implements SysLoginService {
@Lazy
@Autowired
private
LoginRedisService
loginRedisService
;
private
Sys
LoginRedisService
loginRedisService
;
@Lazy
@Autowired
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/LoginRedisService.java
→
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/
App
LoginRedisService.java
View file @
b66930c6
...
...
@@ -28,7 +28,7 @@ import io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserVo;
* @date 2019-09-30
* @since 1.3.0.RELEASE
**/
public
interface
LoginRedisService
{
public
interface
App
LoginRedisService
{
/**
* 缓存登录信息
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/MerchantLoginRedisService.java
0 → 100755
View file @
b66930c6
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
cache
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserVo
;
/**
* 登录信息Redis缓存操作服务
*
* @author geekidea
* @date 2019-09-30
* @since 1.3.0.RELEASE
**/
public
interface
MerchantLoginRedisService
{
/**
* 缓存登录信息
*
* @param jwtToken
* @param loginSysUserVo
*/
void
cacheLoginInfo
(
JwtToken
jwtToken
,
LoginSysUserVo
loginSysUserVo
);
/**
* 刷新登录信息
*
* @param oldToken
* @param username
* @param newJwtToken
*/
void
refreshLoginInfo
(
String
oldToken
,
String
username
,
JwtToken
newJwtToken
);
/**
* 通过用户名,从缓存中获取登录用户LoginSysUserRedisVo
*
* @param username
* @return
*/
LoginSysUserRedisVo
getLoginSysUserRedisVo
(
String
username
);
/**
* 获取登录用户对象
*
* @param username
* @return
*/
LoginSysUserVo
getLoginSysUserVo
(
String
username
);
/**
* 通过用户名称获取盐值
*
* @param username
* @return
*/
String
getSalt
(
String
username
);
/**
* 删除对应用户的Redis缓存
*
* @param token
* @param username
*/
void
deleteLoginInfo
(
String
token
,
String
username
);
/**
* 判断token在redis中是否存在
*
* @param token
* @return
*/
boolean
exists
(
String
token
);
/**
* 删除用户所有登录缓存
*
* @param username
*/
void
deleteUserAllCache
(
String
username
);
}
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/SysLoginRedisService.java
0 → 100755
View file @
b66930c6
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
cache
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserVo
;
/**
* 登录信息Redis缓存操作服务
*
* @author geekidea
* @date 2019-09-30
* @since 1.3.0.RELEASE
**/
public
interface
SysLoginRedisService
{
/**
* 缓存登录信息
*
* @param jwtToken
* @param loginSysUserVo
*/
void
cacheLoginInfo
(
JwtToken
jwtToken
,
LoginSysUserVo
loginSysUserVo
);
/**
* 刷新登录信息
*
* @param oldToken
* @param username
* @param newJwtToken
*/
void
refreshLoginInfo
(
String
oldToken
,
String
username
,
JwtToken
newJwtToken
);
/**
* 通过用户名,从缓存中获取登录用户LoginSysUserRedisVo
*
* @param username
* @return
*/
LoginSysUserRedisVo
getLoginSysUserRedisVo
(
String
username
);
/**
* 获取登录用户对象
*
* @param username
* @return
*/
LoginSysUserVo
getLoginSysUserVo
(
String
username
);
/**
* 通过用户名称获取盐值
*
* @param username
* @return
*/
String
getSalt
(
String
username
);
/**
* 删除对应用户的Redis缓存
*
* @param token
* @param username
*/
void
deleteLoginInfo
(
String
token
,
String
username
);
/**
* 判断token在redis中是否存在
*
* @param token
* @return
*/
boolean
exists
(
String
token
);
/**
* 删除用户所有登录缓存
*
* @param username
*/
void
deleteUserAllCache
(
String
username
);
}
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/AppLoginRedisServiceImpl.java
0 → 100644
View file @
b66930c6
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
cache
.
impl
;
import
io.geekidea.springbootplus.config.constant.CommonRedisKey
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.framework.common.bean.ClientInfo
;
import
io.geekidea.springbootplus.framework.shiro.cache.AppLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.convert.LoginSysUserVoConvert
;
import
io.geekidea.springbootplus.framework.shiro.convert.ShiroMapstructConvert
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.JwtTokenRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserVo
;
import
io.geekidea.springbootplus.framework.util.ClientInfoUtil
;
import
io.geekidea.springbootplus.framework.util.HttpServletRequestUtil
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
import
java.util.List
;
import
java.util.Set
;
@Service
public
class
AppLoginRedisServiceImpl
implements
AppLoginRedisService
{
@Autowired
private
JwtProperties
jwtProperties
;
@Autowired
private
RedisTemplate
redisTemplate
;
/**
* key-value: 有过期时间-->token过期时间
* 1. tokenMd5:jwtTokenRedisVo
* 2. username:loginSysUserRedisVo
* 3. username:salt
* hash: 没有过期时间,统计在线的用户信息
* username:num
*/
@Override
public
void
cacheLoginInfo
(
JwtToken
jwtToken
,
LoginSysUserVo
loginSysUserVo
)
{
if
(
jwtToken
==
null
)
{
throw
new
IllegalArgumentException
(
"jwtToken不能为空"
);
}
if
(
loginSysUserVo
==
null
)
{
throw
new
IllegalArgumentException
(
"loginSysUserVo不能为空"
);
}
// token
String
token
=
jwtToken
.
getToken
();
// 盐值
String
salt
=
jwtToken
.
getSalt
();
// 登录用户名称
String
username
=
loginSysUserVo
.
getUsername
();
// token md5值
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
// Redis缓存JWT Token信息
JwtTokenRedisVo
jwtTokenRedisVo
=
ShiroMapstructConvert
.
INSTANCE
.
jwtTokenToJwtTokenRedisVo
(
jwtToken
);
// 用户客户端信息
ClientInfo
clientInfo
=
ClientInfoUtil
.
get
(
HttpServletRequestUtil
.
getRequest
());
// Redis缓存登录用户信息
// 将LoginSysUserVo对象复制到LoginSysUserRedisVo,使用mapstruct进行对象属性复制
LoginSysUserRedisVo
loginSysUserRedisVo
=
LoginSysUserVoConvert
.
INSTANCE
.
voToRedisVo
(
loginSysUserVo
);
loginSysUserRedisVo
.
setSalt
(
salt
);
loginSysUserRedisVo
.
setClientInfo
(
clientInfo
);
// Redis过期时间与JwtToken过期时间一致
Duration
expireDuration
=
Duration
.
ofSeconds
(
jwtToken
.
getExpireSecond
());
// 判断是否启用单个用户登录,如果是,这每个用户只有一个有效token
boolean
singleLogin
=
jwtProperties
.
isSingleLogin
();
if
(
singleLogin
)
{
deleteUserAllCache
(
username
);
}
// 1. tokenMd5:jwtTokenRedisVo
String
loginTokenRedisKey
=
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
);
redisTemplate
.
opsForValue
().
set
(
loginTokenRedisKey
,
jwtTokenRedisVo
,
expireDuration
);
// 2. username:loginSysUserRedisVo
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
),
loginSysUserRedisVo
,
expireDuration
);
// 3. salt hash,方便获取盐值鉴权
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
),
salt
,
expireDuration
);
// 4. login user token
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_TOKEN
,
username
,
tokenMd5
),
loginTokenRedisKey
,
expireDuration
);
}
@Override
public
void
refreshLoginInfo
(
String
oldToken
,
String
username
,
JwtToken
newJwtToken
)
{
// 获取缓存的登录用户信息
LoginSysUserRedisVo
loginSysUserRedisVo
=
getLoginSysUserRedisVo
(
username
);
// 删除之前的token信息
deleteLoginInfo
(
oldToken
,
username
);
// 缓存登录信息
cacheLoginInfo
(
newJwtToken
,
loginSysUserRedisVo
);
}
@Override
public
LoginSysUserRedisVo
getLoginSysUserRedisVo
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
return
(
LoginSysUserRedisVo
)
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
}
@Override
public
LoginSysUserVo
getLoginSysUserVo
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
LoginSysUserRedisVo
userRedisVo
=
getLoginSysUserRedisVo
(
username
);
return
userRedisVo
;
}
@Override
public
String
getSalt
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
String
salt
=
(
String
)
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
return
salt
;
}
@Override
public
void
deleteLoginInfo
(
String
token
,
String
username
)
{
if
(
token
==
null
)
{
throw
new
IllegalArgumentException
(
"token不能为空"
);
}
if
(
username
==
null
)
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
// 1. delete tokenMd5
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
));
// 2. delete username
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
// 3. delete salt
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
// 4. delete user token
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_TOKEN
,
username
,
tokenMd5
));
}
@Override
public
boolean
exists
(
String
token
)
{
if
(
token
==
null
)
{
throw
new
IllegalArgumentException
(
"token不能为空"
);
}
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
Object
object
=
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
));
return
object
!=
null
;
}
@Override
public
void
deleteUserAllCache
(
String
username
)
{
Set
<
String
>
userTokenMd5Set
=
redisTemplate
.
keys
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_ALL_TOKEN
,
username
));
if
(
CollectionUtils
.
isEmpty
(
userTokenMd5Set
))
{
return
;
}
// 1. 删除登录用户的所有token信息
List
<
String
>
tokenMd5List
=
redisTemplate
.
opsForValue
().
multiGet
(
userTokenMd5Set
);
redisTemplate
.
delete
(
tokenMd5List
);
// 2. 删除登录用户的所有user:token信息
redisTemplate
.
delete
(
userTokenMd5Set
);
// 3. 删除登录用户信息
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
// 4. 删除登录用户盐值信息
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
}
}
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/MerchantLoginRedisServiceImpl.java
0 → 100644
View file @
b66930c6
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
cache
.
impl
;
import
io.geekidea.springbootplus.config.constant.CommonRedisKey
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.framework.common.bean.ClientInfo
;
import
io.geekidea.springbootplus.framework.shiro.cache.MerchantLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.convert.LoginSysUserVoConvert
;
import
io.geekidea.springbootplus.framework.shiro.convert.ShiroMapstructConvert
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.JwtTokenRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserVo
;
import
io.geekidea.springbootplus.framework.util.ClientInfoUtil
;
import
io.geekidea.springbootplus.framework.util.HttpServletRequestUtil
;
import
org.apache.commons.codec.digest.DigestUtils
;
import
org.apache.commons.collections4.CollectionUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.springframework.beans.factory.annotation.Autowired
;
import
org.springframework.data.redis.core.RedisTemplate
;
import
org.springframework.stereotype.Service
;
import
java.time.Duration
;
import
java.util.List
;
import
java.util.Set
;
@Service
public
class
MerchantLoginRedisServiceImpl
implements
MerchantLoginRedisService
{
@Autowired
private
JwtProperties
jwtProperties
;
@Autowired
private
RedisTemplate
redisTemplate
;
/**
* key-value: 有过期时间-->token过期时间
* 1. tokenMd5:jwtTokenRedisVo
* 2. username:loginSysUserRedisVo
* 3. username:salt
* hash: 没有过期时间,统计在线的用户信息
* username:num
*/
@Override
public
void
cacheLoginInfo
(
JwtToken
jwtToken
,
LoginSysUserVo
loginSysUserVo
)
{
if
(
jwtToken
==
null
)
{
throw
new
IllegalArgumentException
(
"jwtToken不能为空"
);
}
if
(
loginSysUserVo
==
null
)
{
throw
new
IllegalArgumentException
(
"loginSysUserVo不能为空"
);
}
// token
String
token
=
jwtToken
.
getToken
();
// 盐值
String
salt
=
jwtToken
.
getSalt
();
// 登录用户名称
String
username
=
loginSysUserVo
.
getUsername
();
// token md5值
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
// Redis缓存JWT Token信息
JwtTokenRedisVo
jwtTokenRedisVo
=
ShiroMapstructConvert
.
INSTANCE
.
jwtTokenToJwtTokenRedisVo
(
jwtToken
);
// 用户客户端信息
ClientInfo
clientInfo
=
ClientInfoUtil
.
get
(
HttpServletRequestUtil
.
getRequest
());
// Redis缓存登录用户信息
// 将LoginSysUserVo对象复制到LoginSysUserRedisVo,使用mapstruct进行对象属性复制
LoginSysUserRedisVo
loginSysUserRedisVo
=
LoginSysUserVoConvert
.
INSTANCE
.
voToRedisVo
(
loginSysUserVo
);
loginSysUserRedisVo
.
setSalt
(
salt
);
loginSysUserRedisVo
.
setClientInfo
(
clientInfo
);
// Redis过期时间与JwtToken过期时间一致
Duration
expireDuration
=
Duration
.
ofSeconds
(
jwtToken
.
getExpireSecond
());
// 判断是否启用单个用户登录,如果是,这每个用户只有一个有效token
boolean
singleLogin
=
jwtProperties
.
isSingleLogin
();
if
(
singleLogin
)
{
deleteUserAllCache
(
username
);
}
// 1. tokenMd5:jwtTokenRedisVo
String
loginTokenRedisKey
=
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
);
redisTemplate
.
opsForValue
().
set
(
loginTokenRedisKey
,
jwtTokenRedisVo
,
expireDuration
);
// 2. username:loginSysUserRedisVo
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
),
loginSysUserRedisVo
,
expireDuration
);
// 3. salt hash,方便获取盐值鉴权
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
),
salt
,
expireDuration
);
// 4. login user token
redisTemplate
.
opsForValue
().
set
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_TOKEN
,
username
,
tokenMd5
),
loginTokenRedisKey
,
expireDuration
);
}
@Override
public
void
refreshLoginInfo
(
String
oldToken
,
String
username
,
JwtToken
newJwtToken
)
{
// 获取缓存的登录用户信息
LoginSysUserRedisVo
loginSysUserRedisVo
=
getLoginSysUserRedisVo
(
username
);
// 删除之前的token信息
deleteLoginInfo
(
oldToken
,
username
);
// 缓存登录信息
cacheLoginInfo
(
newJwtToken
,
loginSysUserRedisVo
);
}
@Override
public
LoginSysUserRedisVo
getLoginSysUserRedisVo
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
return
(
LoginSysUserRedisVo
)
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
}
@Override
public
LoginSysUserVo
getLoginSysUserVo
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
LoginSysUserRedisVo
userRedisVo
=
getLoginSysUserRedisVo
(
username
);
return
userRedisVo
;
}
@Override
public
String
getSalt
(
String
username
)
{
if
(
StringUtils
.
isBlank
(
username
))
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
String
salt
=
(
String
)
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
return
salt
;
}
@Override
public
void
deleteLoginInfo
(
String
token
,
String
username
)
{
if
(
token
==
null
)
{
throw
new
IllegalArgumentException
(
"token不能为空"
);
}
if
(
username
==
null
)
{
throw
new
IllegalArgumentException
(
"username不能为空"
);
}
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
// 1. delete tokenMd5
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
));
// 2. delete username
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
// 3. delete salt
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
// 4. delete user token
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_TOKEN
,
username
,
tokenMd5
));
}
@Override
public
boolean
exists
(
String
token
)
{
if
(
token
==
null
)
{
throw
new
IllegalArgumentException
(
"token不能为空"
);
}
String
tokenMd5
=
DigestUtils
.
md5Hex
(
token
);
Object
object
=
redisTemplate
.
opsForValue
().
get
(
String
.
format
(
CommonRedisKey
.
LOGIN_TOKEN
,
tokenMd5
));
return
object
!=
null
;
}
@Override
public
void
deleteUserAllCache
(
String
username
)
{
Set
<
String
>
userTokenMd5Set
=
redisTemplate
.
keys
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER_ALL_TOKEN
,
username
));
if
(
CollectionUtils
.
isEmpty
(
userTokenMd5Set
))
{
return
;
}
// 1. 删除登录用户的所有token信息
List
<
String
>
tokenMd5List
=
redisTemplate
.
opsForValue
().
multiGet
(
userTokenMd5Set
);
redisTemplate
.
delete
(
tokenMd5List
);
// 2. 删除登录用户的所有user:token信息
redisTemplate
.
delete
(
userTokenMd5Set
);
// 3. 删除登录用户信息
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_USER
,
username
));
// 4. 删除登录用户盐值信息
redisTemplate
.
delete
(
String
.
format
(
CommonRedisKey
.
LOGIN_SALT
,
username
));
}
}
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/LoginRedisServiceImpl.java
→
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/cache/impl/
Sys
LoginRedisServiceImpl.java
View file @
b66930c6
...
...
@@ -19,7 +19,7 @@ package io.geekidea.springbootplus.framework.shiro.cache.impl;
import
io.geekidea.springbootplus.config.constant.CommonRedisKey
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.framework.common.bean.ClientInfo
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.
Sys
LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.convert.LoginSysUserVoConvert
;
import
io.geekidea.springbootplus.framework.shiro.convert.ShiroMapstructConvert
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
...
...
@@ -47,7 +47,7 @@ import java.util.Set;
* @since 1.3.0.RELEASE
**/
@Service
public
class
LoginRedisServiceImpl
implements
LoginRedisService
{
public
class
SysLoginRedisServiceImpl
implements
Sys
LoginRedisService
{
@Autowired
private
JwtProperties
jwtProperties
;
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/JwtFilter.java
View file @
b66930c6
...
...
@@ -19,7 +19,7 @@ package io.geekidea.springbootplus.framework.shiro.jwt;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.framework.common.api.ApiCode
;
import
io.geekidea.springbootplus.framework.common.api.ApiResult
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.
Sys
LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.service.ShiroLoginService
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtTokenUtil
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtUtil
;
...
...
@@ -49,11 +49,11 @@ public class JwtFilter extends AuthenticatingFilter {
private
final
ShiroLoginService
shiroLoginService
;
private
final
LoginRedisService
loginRedisService
;
private
final
Sys
LoginRedisService
loginRedisService
;
private
final
JwtProperties
jwtProperties
;
public
JwtFilter
(
ShiroLoginService
shiroLoginService
,
LoginRedisService
loginRedisService
,
JwtProperties
jwtProperties
)
{
public
JwtFilter
(
ShiroLoginService
shiroLoginService
,
Sys
LoginRedisService
loginRedisService
,
JwtProperties
jwtProperties
)
{
this
.
shiroLoginService
=
shiroLoginService
;
this
.
loginRedisService
=
loginRedisService
;
this
.
jwtProperties
=
jwtProperties
;
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/JwtRealmSystem.java
deleted
100755 → 0
View file @
82168ad8
/*
* Copyright 2019-2029 geekidea(https://github.com/geekidea)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.SetUtils
;
import
org.apache.commons.lang3.StringUtils
;
import
org.apache.shiro.authc.AuthenticationException
;
import
org.apache.shiro.authc.AuthenticationInfo
;
import
org.apache.shiro.authc.AuthenticationToken
;
import
org.apache.shiro.authc.SimpleAuthenticationInfo
;
import
org.apache.shiro.authz.AuthorizationInfo
;
import
org.apache.shiro.authz.SimpleAuthorizationInfo
;
import
org.apache.shiro.realm.AuthorizingRealm
;
import
org.apache.shiro.subject.PrincipalCollection
;
/**
* Shiro 授权认证-系统
*
* @author geekidea
* @date 2019-09-27
* @since 1.3.0.RELEASE
**/
@Slf4j
public
class
JwtRealmSystem
extends
AuthorizingRealm
{
private
LoginRedisService
loginRedisService
;
public
JwtRealmSystem
(
LoginRedisService
loginRedisService
)
{
this
.
loginRedisService
=
loginRedisService
;
}
@Override
public
boolean
supports
(
AuthenticationToken
token
)
{
return
token
!=
null
&&
token
instanceof
JwtToken
;
}
/**
* 授权认证,设置角色/权限信息
*
* @param principalCollection
* @return
*/
@Override
protected
AuthorizationInfo
doGetAuthorizationInfo
(
PrincipalCollection
principalCollection
)
{
log
.
debug
(
"doGetAuthorizationInfo principalCollection..."
);
// 设置角色/权限信息
JwtToken
jwtToken
=
(
JwtToken
)
principalCollection
.
getPrimaryPrincipal
();
// 获取username
String
username
=
jwtToken
.
getUsername
();
// 获取登录用户角色权限信息
LoginSysUserRedisVo
loginSysUserRedisVo
=
loginRedisService
.
getLoginSysUserRedisVo
(
username
);
SimpleAuthorizationInfo
authorizationInfo
=
new
SimpleAuthorizationInfo
();
// 设置角色
authorizationInfo
.
setRoles
(
SetUtils
.
hashSet
(
loginSysUserRedisVo
.
getRoleCode
()));
// 设置权限
authorizationInfo
.
setStringPermissions
(
loginSysUserRedisVo
.
getPermissionCodes
());
return
authorizationInfo
;
}
/**
* 登录认证
*
* @param authenticationToken
* @return
* @throws AuthenticationException
*/
@Override
protected
AuthenticationInfo
doGetAuthenticationInfo
(
AuthenticationToken
authenticationToken
)
throws
AuthenticationException
{
log
.
debug
(
"doGetAuthenticationInfo authenticationToken..."
);
// 校验token
JwtToken
jwtToken
=
(
JwtToken
)
authenticationToken
;
if
(
jwtToken
==
null
)
{
throw
new
AuthenticationException
(
"jwtToken不能为空"
);
}
String
salt
=
jwtToken
.
getSalt
();
if
(
StringUtils
.
isBlank
(
salt
))
{
throw
new
AuthenticationException
(
"salt不能为空"
);
}
return
new
SimpleAuthenticationInfo
(
jwtToken
,
salt
,
getName
()
);
}
}
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/realm/JwtRealmAppUser.java
View file @
b66930c6
...
...
@@ -16,7 +16,7 @@
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
.
realm
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.
App
LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
lombok.extern.slf4j.Slf4j
;
...
...
@@ -41,9 +41,9 @@ import org.apache.shiro.subject.PrincipalCollection;
@Slf4j
public
class
JwtRealmAppUser
extends
AuthorizingRealm
{
private
LoginRedisService
loginRedisService
;
private
App
LoginRedisService
loginRedisService
;
public
JwtRealmAppUser
(
LoginRedisService
loginRedisService
)
{
public
JwtRealmAppUser
(
App
LoginRedisService
loginRedisService
)
{
this
.
loginRedisService
=
loginRedisService
;
}
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/JwtRealmMerchant.java
→
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/
realm/
JwtRealmMerchant.java
View file @
b66930c6
...
...
@@ -14,9 +14,10 @@
* limitations under the License.
*/
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
;
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
.
realm
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.MerchantLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.SetUtils
;
...
...
@@ -40,9 +41,9 @@ import org.apache.shiro.subject.PrincipalCollection;
@Slf4j
public
class
JwtRealmMerchant
extends
AuthorizingRealm
{
private
LoginRedisService
loginRedisService
;
private
Merchant
LoginRedisService
loginRedisService
;
public
JwtRealmMerchant
(
LoginRedisService
loginRedisService
)
{
public
JwtRealmMerchant
(
Merchant
LoginRedisService
loginRedisService
)
{
this
.
loginRedisService
=
loginRedisService
;
}
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/
JwtReal
m.java
→
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/jwt/
realm/JwtRealmSyste
m.java
View file @
b66930c6
...
...
@@ -14,9 +14,10 @@
* limitations under the License.
*/
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
;
package
io
.
geekidea
.
springbootplus
.
framework
.
shiro
.
jwt
.
realm
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.SysLoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.vo.LoginSysUserRedisVo
;
import
lombok.extern.slf4j.Slf4j
;
import
org.apache.commons.collections4.SetUtils
;
...
...
@@ -38,11 +39,11 @@ import org.apache.shiro.subject.PrincipalCollection;
* @since 1.3.0.RELEASE
**/
@Slf4j
public
class
JwtRealm
extends
AuthorizingRealm
{
public
class
JwtRealm
System
extends
AuthorizingRealm
{
private
LoginRedisService
loginRedisService
;
private
Sys
LoginRedisService
loginRedisService
;
public
JwtRealm
(
LoginRedisService
loginRedisService
)
{
public
JwtRealm
System
(
Sys
LoginRedisService
loginRedisService
)
{
this
.
loginRedisService
=
loginRedisService
;
}
...
...
framework/src/main/java/io/geekidea/springbootplus/framework/shiro/service/impl/ShiroLoginServiceImpl.java
View file @
b66930c6
...
...
@@ -19,7 +19,7 @@ package io.geekidea.springbootplus.framework.shiro.service.impl;
import
io.geekidea.springbootplus.config.constant.CommonConstant
;
import
io.geekidea.springbootplus.config.properties.JwtProperties
;
import
io.geekidea.springbootplus.config.properties.SpringBootPlusProperties
;
import
io.geekidea.springbootplus.framework.shiro.cache.LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.cache.
Sys
LoginRedisService
;
import
io.geekidea.springbootplus.framework.shiro.jwt.JwtToken
;
import
io.geekidea.springbootplus.framework.shiro.service.ShiroLoginService
;
import
io.geekidea.springbootplus.framework.shiro.util.JwtTokenUtil
;
...
...
@@ -50,7 +50,7 @@ public class ShiroLoginServiceImpl implements ShiroLoginService {
@Lazy
@Autowired
private
LoginRedisService
loginRedisService
;
private
Sys
LoginRedisService
loginRedisService
;
@Lazy
@Autowired
...
...
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