game-api/ff-base/src/main/java/com/ff/base/utils/SecurityUtils.java

257 lines
6.4 KiB
Java
Raw Normal View History

2025-02-11 15:27:15 +08:00
package com.ff.base.utils;
import com.ff.base.constant.Constants;
import com.ff.base.constant.HttpStatus;
import com.ff.base.core.domain.model.LoginUser;
import com.ff.base.exception.ServiceException;
import com.ff.base.system.domain.SysRole;
import com.ff.base.utils.bean.BeanUtils;
import com.ff.base.utils.sign.Md5Utils;
import com.ff.base.utils.spring.SpringUtils;
import com.ff.base.web.service.TokenService;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.util.PatternMatchUtils;
import javax.management.relation.Role;
2025-02-11 15:27:15 +08:00
import java.util.Collection;
import java.util.List;
import java.util.Set;
2025-02-11 15:27:15 +08:00
import java.util.stream.Collectors;
/**
*
*
* @author ff
*/
public class SecurityUtils
{
/**
* idnull
*
* @return {@link Long }
*/
public static Long getUserIdOrNull()
{
try
{
return getLoginUser().getUserId();
}
catch (Exception e)
{
return null;
}
}
/**
* ID
**/
public static Long getUserId()
{
try
{
return getLoginUser().getUserId();
}
catch (Exception e)
{
throw new ServiceException("获取用户ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
*
*
* @return {@link List }<{@link SysRole }>
*/
public static List<SysRole> getRoles()
{
try
{
return getLoginUser().getUser().getRoles();
}
catch (Exception e)
{
throw new ServiceException("获取用户角色异常", HttpStatus.UNAUTHORIZED);
}
}
2025-02-11 15:27:15 +08:00
/**
* ID
**/
public static Long getDeptId()
{
try
{
return getLoginUser().getDeptId();
}
catch (Exception e)
{
throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
}
}
/**
*
**/
public static String getUsername()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
throw new ServiceException("获取用户账户异常", HttpStatus.UNAUTHORIZED);
}
}
/**
*
**/
public static String getUsernameOrNull()
{
try
{
return getLoginUser().getUsername();
}
catch (Exception e)
{
return null;
}
}
/**
*
**/
public static LoginUser getLoginUser()
{
try
{
return (LoginUser) getAuthentication().getPrincipal();
}
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
public static void setLoginUser(LoginUser loginUser)
{
try
{
LoginUser principal = (LoginUser) getAuthentication().getPrincipal();
BeanUtils.copyProperties(loginUser,principal);
UsernamePasswordAuthenticationToken authentication = (UsernamePasswordAuthenticationToken) SecurityContextHolder.getContext().getAuthentication();
UsernamePasswordAuthenticationToken copy = new UsernamePasswordAuthenticationToken(principal,null);
// 修改原对象为空的字段不修改
BeanUtils.nullAwareCopyProperties(copy,authentication);
SecurityContextHolder.getContext().setAuthentication(authentication);
SpringUtils.getBean(TokenService.class).setLoginUser(loginUser);
}
catch (Exception e)
{
throw new ServiceException("获取用户信息异常", HttpStatus.UNAUTHORIZED);
}
}
/**
* Authentication
*/
public static Authentication getAuthentication()
{
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* BCryptPasswordEncoder
*
* @param password
* @return
*/
public static String encryptPassword(String password)
{
return Md5Utils.hash(password);
}
/**
*
*
* @param rawPassword
* @param encodedPassword
* @return
*/
public static boolean matchesPassword(String rawPassword, String encodedPassword)
{
return StringUtils.equals(Md5Utils.hash(rawPassword), encodedPassword);
}
/**
*
*
* @param userId ID
* @return
*/
public static boolean isAdmin(Long userId)
{
return userId != null && 1L == userId;
}
/**
*
*
* @param permission
* @return
*/
public static boolean hasPermi(String permission)
{
return hasPermi(getLoginUser().getPermissions(), permission);
}
/**
*
*
* @param authorities
* @param permission
* @return
*/
public static boolean hasPermi(Collection<String> authorities, String permission)
{
return authorities.stream().filter(StringUtils::hasText)
.anyMatch(x -> Constants.ALL_PERMISSION.equals(x) || PatternMatchUtils.simpleMatch(x, permission));
}
/**
*
*
* @param role
* @return
*/
public static boolean hasRole(String role)
{
List<SysRole> roleList = getLoginUser().getUser().getRoles();
Collection<String> roles = roleList.stream().map(SysRole::getRoleKey).collect(Collectors.toSet());
return hasRole(roles, role);
}
2025-02-11 15:27:15 +08:00
/**
*
*
* @param roles
* @param role
* @return
*/
public static boolean hasRole(Collection<String> roles, String role)
{
return roles.stream().filter(StringUtils::hasText)
.anyMatch(x -> Constants.SUPER_ADMIN.equals(x) || PatternMatchUtils.simpleMatch(x, role));
}
}