/**
|
* Copyright (C) 2018-2020
|
* All rights reserved, Designed By www.yixiang.co
|
* 注意:
|
* 本软件为www.yixiang.co开发研制
|
*/
|
package com.sandu.ximon.admin.security;
|
|
import cn.hutool.json.JSONObject;
|
import com.sandu.common.enums.ResponseStatusEnums;
|
import com.sandu.common.execption.BusinessException;
|
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 com.sandu.ximon.dao.enums.AdministratorEnums;
|
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 {
|
|
/**
|
* 获取用户信息
|
*/
|
private static UserDetails getUserDetails() {
|
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
if (authentication == null) {
|
throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage());
|
}
|
Integer administratorIdentity = getAdministratorIdentity();
|
if (AdministratorEnums.ADMIN.getCode().equals(administratorIdentity) || AdministratorEnums.INSPECT_CUSTOMER.getCode().equals(administratorIdentity)) {
|
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
|
UserDetailsService userDetailsService = SpringContextHolder.getBean("adminDetailsService");
|
return userDetailsService.loadUserByUsername(userDetails.getUsername());
|
} else if (AdministratorEnums.CUSTOMER.getCode().equals(administratorIdentity)) {
|
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
|
UserDetailsService userDetailsService = SpringContextHolder.getBean("customerDetailsService");
|
return userDetailsService.loadUserByUsername(userDetails.getUsername());
|
}
|
|
return null;
|
}
|
|
/**
|
* 获取系统用户名称 登录名
|
*
|
* @return 系统用户名称
|
*/
|
public static String getUsername() {
|
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
if (authentication == null) {
|
throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage());
|
}
|
UserDetails userDetails = (UserDetails) authentication.getPrincipal();
|
return userDetails.getUsername();
|
}
|
|
/**
|
* 获取管理员身份, 类型可见 {{@link AdministratorEnums}}
|
*
|
* @return
|
*/
|
public static Integer getAdministratorIdentity() {
|
final Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
|
if (authentication == null) {
|
throw new BusinessException(ResponseStatusEnums.TOKEN_INVALID.getCode(), ResponseStatusEnums.TOKEN_INVALID.getMessage());
|
}
|
return (Integer) authentication.getCredentials();
|
}
|
|
/**
|
* 获取系统用户id
|
*
|
* @return 系统用户id
|
*/
|
public static Long getUserId() {
|
SecurityProperties properties = SpringContextHolder.getBean(SecurityProperties.class);
|
if (!properties.isCacheOnline()) {
|
UserDetails obj = getUserDetails();
|
if (obj == null) {
|
return null;
|
}
|
if (!obj.isEnabled()) {
|
throw new BusinessException(ResponseStatusEnums.DISABLE_ACCOUNT.getCode(), ResponseStatusEnums.DISABLE_ACCOUNT.getMessage());
|
}
|
JSONObject json = new JSONObject(obj);
|
return json.getJSONObject("user").get("id", Long.class);
|
} 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) {
|
return one.getUserId();
|
} else {
|
return null;
|
}
|
}
|
}
|
}
|