Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
ssssssss-team
magic-api-example
提交
32c9bff3
M
magic-api-example
项目概览
ssssssss-team
/
magic-api-example
9 个月 前同步成功
通知
1
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
M
magic-api-example
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
32c9bff3
编写于
5月 11, 2021
作者:
小
小东
浏览文件
操作
浏览文件
下载
差异文件
!1 简单实现自定义多用户名密码登录,以及权限控制
Merge pull request !1 from Bean先森/master
上级
97f08f00
af1d93b8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
132 addition
and
0 deletion
+132
-0
src/main/java/org/ssssssss/example/interceptor/SimpleAuthorizationInterceptor.java
...s/example/interceptor/SimpleAuthorizationInterceptor.java
+132
-0
未找到文件。
src/main/java/org/ssssssss/example/interceptor/SimpleAuthorizationInterceptor.java
0 → 100644
浏览文件 @
32c9bff3
package
org.ssssssss.magicapi.example.interceptor
;
import
org.slf4j.Logger
;
import
org.slf4j.LoggerFactory
;
import
org.springframework.beans.factory.annotation.Value
;
import
org.springframework.boot.autoconfigure.condition.ConditionalOnProperty
;
import
org.springframework.boot.context.properties.ConfigurationProperties
;
import
org.springframework.context.annotation.Configuration
;
import
org.ssssssss.magicapi.exception.MagicLoginException
;
import
org.ssssssss.magicapi.interceptor.Authorization
;
import
org.ssssssss.magicapi.interceptor.AuthorizationInterceptor
;
import
org.ssssssss.magicapi.interceptor.MagicUser
;
import
javax.servlet.http.HttpServletRequest
;
import
java.io.UnsupportedEncodingException
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.Map
;
/**
* 自定义多用户名密码登录,以及权限控制
* 使用方式在项目工程中@import 或者 @Bean注解使spring管理。
* magic-api.ext.auth.enable=true #启用
* #magic-api.ext.auth.users.用户名=123456 #配置用户信息
* #magic-api.ext.auth.denyOptions.用户名=DELETE #配置用户禁用的权限 {@linkplain Authorization}
* #magic-api.ext.auth.users.xx=password
* #magic-api.ext.auth.denyOptions.xx=DELETE
* @author 冰点
* @date 2021-5-11 17:17:52
*/
@Configuration
@ConditionalOnProperty
(
prefix
=
"magic-api.ext.auth"
,
name
=
"enable"
,
havingValue
=
"true"
,
matchIfMissing
=
false
)
@ConfigurationProperties
(
prefix
=
"magic-api.ext.auth"
)
public
class
SimpleAuthorizationInterceptor
implements
AuthorizationInterceptor
{
private
static
final
Logger
log
=
LoggerFactory
.
getLogger
(
SimpleAuthorizationInterceptor
.
class
);
/**
* 加密因子
*/
@Value
(
"${magic-api.ext.auth.encryIndex:1}"
)
private
int
encryIndex
;
/**
* 用户信息
*/
private
Map
<
String
,
String
>
users
;
/**
* 用户权限
*/
private
Map
<
String
,
String
>
denyOptions
;
public
SimpleAuthorizationInterceptor
()
{
log
.
info
(
"已启用多用户登录扩展,如需关闭请magic-api.ext.auth.enable=false"
);
}
/**
* 配置是否需要登录
*/
@Override
public
boolean
requireLogin
()
{
return
true
;
}
/**
* 根据Token获取User
*/
@Override
public
MagicUser
getUserByToken
(
String
token
)
throws
MagicLoginException
{
String
[]
userInfo
=
getUserInfoByToken
(
token
);
MagicUser
magicUser
=
new
MagicUser
(
userInfo
[
0
],
userInfo
[
0
],
getToken
(
userInfo
[
0
],
userInfo
[
1
]));
if
(
users
.
containsKey
(
magicUser
.
getUsername
())
&&
users
.
get
(
magicUser
.
getUsername
()).
equals
(
userInfo
[
1
]))
{
return
magicUser
;
}
throw
new
MagicLoginException
(
"token无效"
);
}
@Override
public
MagicUser
login
(
String
username
,
String
password
)
throws
MagicLoginException
{
// 根据实际情况进行修改。。
if
(
users
.
containsKey
(
username
)
&&
users
.
get
(
username
).
equals
(
password
))
{
return
new
MagicUser
(
username
,
username
,
getToken
(
username
,
password
));
}
throw
new
MagicLoginException
(
"用户名或密码不正确"
);
}
/**
* 验证是否有权限访问功能
*/
@Override
public
boolean
allowVisit
(
MagicUser
magicUser
,
HttpServletRequest
request
,
Authorization
authorization
)
{
String
[]
denyOption
=
denyOptions
.
get
(
magicUser
.
getUsername
()).
split
(
","
);
List
<
String
>
list
=
Arrays
.
asList
(
denyOption
);
return
!
list
.
contains
(
authorization
.
name
());
}
public
String
getToken
(
String
username
,
String
password
)
throws
MagicLoginException
{
String
token
=
null
;
try
{
byte
[]
b
=
(
username
+
";"
+
password
).
getBytes
(
"utf-8"
);
for
(
int
i
=
0
;
i
<
b
.
length
;
i
++)
{
b
[
i
]
+=
encryIndex
;
}
token
=
new
String
(
b
);
log
.
debug
(
"本次登录token:[{}]"
,
token
);
}
catch
(
UnsupportedEncodingException
e
)
{
log
.
info
(
"生成token失败,可能字符集不合法。[{}={}]"
,
username
,
password
);
throw
new
MagicLoginException
(
"用户名或密码配置不合法"
);
}
return
token
;
}
public
String
[]
getUserInfoByToken
(
String
token
)
throws
MagicLoginException
{
try
{
byte
[]
b
=
token
.
getBytes
();
for
(
int
i
=
0
;
i
<
b
.
length
;
i
++)
{
b
[
i
]
-=
encryIndex
;
}
return
new
String
(
b
).
split
(
";"
);
}
catch
(
Exception
e
)
{
log
.
error
(
"根据token:[{}]获取用户信息失败"
,
token
,
e
);
throw
new
MagicLoginException
(
"用户名或密码不正确"
);
}
}
public
void
setUsers
(
Map
<
String
,
String
>
users
)
{
this
.
users
=
users
;
}
public
void
setDenyOptions
(
Map
<
String
,
String
>
denyOptions
)
{
this
.
denyOptions
=
denyOptions
;
}
}
\ No newline at end of file
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录