@des 登录拦截器
*/
@Component
public class LoginInterceptor extends HandlerInterceptorAdapter {
@Value("
s
p
r
i
n
g
.
p
r
o
f
i
l
e
s
.
a
c
t
i
v
e
"
)
p
r
i
v
a
t
e
S
t
r
i
n
g
a
c
t
i
v
e
;
@
V
a
l
u
e
(
"
{}") private String active; @Value("
spring.profiles.active")privateStringactive;@Value("{}")
private String visitorsIps;
@Value("
r
e
d
i
s
.
k
e
y
.
t
o
k
e
n
.
p
r
e
f
i
x
"
)
p
r
i
v
a
t
e
S
t
r
i
n
g
t
o
k
e
n
R
e
d
i
s
K
e
y
P
r
e
f
i
x
;
@
V
a
l
u
e
(
"
{}") private String tokenRedisKeyPrefix; @Value("
redis.key.token.prefix")privateStringtokenRedisKeyPrefix;@Value("{}")
private String redisAccountPrefix;
@Autowired
private RedisMapper redisMapper;
@Resource
private AccountMapper accountMapper;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = ();
// 接口放行注解
ExcludeInterceptor excludeInterceptor = ();
// 无需验证
if (null != excludeInterceptor) {
String ip = (request);
// 接口放行时,如果存在验证白名单验证注解 @VerifWhiteList,验证白名单
VerifWhiteList verifWhiteList = ();
if(null != verifWhiteList) {
// 1、拦截,不满足白名单
if (!(ip)) {
return false;
}
}
return (request, response, handler);
}
LoginUser loginUser = getUser(request, response);
if (null == loginUser) {
return false;
}
(loginUser);
}
return (request, response, handler);
}
private LoginUser getUser(HttpServletRequest request, HttpServletResponse response) throws Exception {
// 需要增加信息字段可通过此处进行扩充
LoginUser loginUser = new LoginUser();
// 开发环境, 模拟用户
if (()) {
(“123456”);
(“wxg”);
(“1”);
(“王旭光”);
(“127.0.0.1”);
} else {
String token = (“token”);
// header中无token
if ((token)) {
printJson(response, .HEADER_TOKEN_EXIST);
return null;
}
/** 从redis中获取用户名,验证token有效性 **/
String userName = (tokenRedisKeyPrefix + token);
// token 无效
if ((userName)) {
printJson(response, .TOKEN_NOT_EXIST);
return null;
} else {
// token续命2个小时
(tokenRedisKeyPrefix + token, 43200);
/** 根据用户名,获取登录用户必要信息 **/
// 先从redis中获取是否有用户基本信息
String loginUserStr = (redisAccountPrefix + userName);
if ((loginUserStr)) {
List<LoginUser> loginUsers = (userName);
if (null != loginUsers && () == 1) {
loginUser = (0);
(redisAccountPrefix + userName, (loginUser),1800);
} else {
printJson(response, .TOKEN_NOT_EXIST);
return null;
}
}
// redis中已有用户信息
else {
loginUser = (loginUserStr, );
}
// 获取ip
((request));
}
}
return loginUser;
}
private static void printJson(HttpServletResponse response, String code) {
String content = (new ()
.setStatus(.STATUS_ERROR)
.setErrorCode(code).builder());
printContent(response, content);
}
private static void printContent(HttpServletResponse response, String content) {
try {
();
(“application/json”);
(“Cache-Control”, “no-store”);
(“UTF-8”);
PrintWriter pw = ();
(content);
();
();
} catch (Exception e) {
();
}
}
}