/**
|
* Copyright (C) 2018-2020
|
* All rights reserved, Designed By www.yixiang.co
|
* 注意:
|
* 本软件为www.yixiang.co开发研制
|
*/
|
package com.sandu.common.security;
|
|
import cn.hutool.core.util.StrUtil;
|
import cn.hutool.json.JSONObject;
|
import com.sandu.common.redis.online.OnlineUser;
|
import com.sandu.common.redis.online.OnlineUserService;
|
import com.sandu.common.security.config.SecurityProperties;
|
import com.sandu.common.security.jwt.JwtTokenProvider;
|
import com.sandu.common.util.RequestHolder;
|
import com.sandu.common.util.SpringContextHolder;
|
import org.springframework.security.core.Authentication;
|
import org.springframework.security.core.context.SecurityContextHolder;
|
import org.springframework.security.core.userdetails.UserDetails;
|
import org.springframework.security.core.userdetails.UserDetailsService;
|
|
import javax.servlet.http.HttpServletRequest;
|
|
/**
|
* 获取当前登录的用户
|
*
|
* @author Zheng Jie
|
* @date 2019-01-17
|
*/
|
public class SecurityUtils {
|
|
public static LoginUserInfo getUserDetails() {
|
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
if (authentication == null) {
|
return null;
|
}
|
if (authentication.getPrincipal() instanceof LoginUserInfo) {
|
LoginUserInfo loginUserInfo = (LoginUserInfo) authentication.getPrincipal();
|
return loginUserInfo;
|
}
|
return null;
|
}
|
|
/**
|
* 获取系统用户名称
|
*
|
* @return 系统用户名称
|
*/
|
public static String getUsername() {
|
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
if (authentication == null) {
|
return "无登录";
|
}
|
if (authentication.getPrincipal() instanceof LoginUserInfo) {
|
LoginUserInfo loginUserInfo = (LoginUserInfo) authentication.getPrincipal();
|
return loginUserInfo.getUsername();
|
}
|
return "无登录";
|
}
|
|
/**
|
* 获取系统用户id
|
*
|
* @return 系统用户id
|
*/
|
public static Long getUserId() {
|
SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
|
if (!properties.isCacheOnline()) {
|
LoginUserInfo obj = getUserDetails();
|
if (obj == null) {
|
return null;
|
}
|
return obj.getUserId();
|
} else {
|
HttpServletRequest httpServletRequest = RequestHolder.getHttpServletRequest();
|
JwtTokenProvider tokenProvider = SpringContextHolder.getBean(JwtTokenProvider.class);
|
OnlineUserService onlineUserService = SpringContextHolder.getBean(OnlineUserService.class);
|
String username = tokenProvider.getSubjectForce(tokenProvider.getToken(httpServletRequest));
|
OnlineUser one = onlineUserService.getOne(properties.getOnlineKey() + username);
|
if (one != null && StrUtil.equals(one.getToken(), tokenProvider.getToken(httpServletRequest))) {
|
return one.getUserId();
|
} else {
|
return null;
|
}
|
}
|
}
|
}
|