/** * 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; } } } }