♻️ system, oauth 相关模块拆分

This commit is contained in:
b2baccline
2021-06-01 10:50:29 +08:00
parent ea0b81d2ae
commit fa4e16d9c1
179 changed files with 848 additions and 555 deletions

View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>ballcat-oauth</artifactId>
<groupId>com.hccake</groupId>
<version>${revision}</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>ballcat-oauth-model</artifactId>
<dependencies>
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-common-core</artifactId>
</dependency>
<dependency>
<groupId>com.hccake</groupId>
<artifactId>ballcat-system-model</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
</dependency>
</dependencies>
</project>

View File

@@ -0,0 +1,91 @@
package com.hccake.ballcat.oauth;
import com.hccake.ballcat.common.core.constant.GlobalConstants;
import com.hccake.ballcat.oauth.domain.UserAttributes;
import com.hccake.ballcat.oauth.domain.UserResources;
import com.hccake.ballcat.system.constant.SysUserConst;
import com.hccake.ballcat.system.model.entity.SysUser;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Collection;
/**
* @author Hccake
* @version 1.0
* @date 2019/9/25 21:03
*/
public class SysUserDetails implements UserDetails {
private final SysUser sysUser;
private final Collection<? extends GrantedAuthority> authorities;
/**
* 用户所有的资源 <br/>
* 默认有用户角色和权限的标识集合,用户可自己扩展
*/
private final UserResources userResources;
/**
* 用户属性 <br/>
* 对于不同类型的用户,可能在业务上需要获取到不同的用户属性
*/
private final UserAttributes userAttributes;
public SysUserDetails(SysUser sysUser, Collection<? extends GrantedAuthority> authorities,
UserResources userResources, UserAttributes userAttributes) {
this.sysUser = sysUser;
this.authorities = authorities;
this.userResources = userResources;
this.userAttributes = userAttributes;
}
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
return authorities;
}
@Override
public String getPassword() {
return sysUser.getPassword();
}
@Override
public String getUsername() {
return sysUser.getUsername();
}
@Override
public boolean isAccountNonExpired() {
return true;
}
@Override
public boolean isAccountNonLocked() {
return GlobalConstants.NOT_DELETED_FLAG.equals(sysUser.getDeleted());
}
@Override
public boolean isCredentialsNonExpired() {
return true;
}
@Override
public boolean isEnabled() {
return SysUserConst.Status.NORMAL.getValue().equals(sysUser.getStatus());
}
public SysUser getSysUser() {
return sysUser;
}
public UserResources getUserResources() {
return userResources;
}
public UserAttributes getUserAttributes() {
return userAttributes;
}
}

View File

@@ -0,0 +1,36 @@
package com.hccake.ballcat.oauth.constant;
/**
* @author Hccake
*/
public final class SecurityConst {
private SecurityConst() {
}
/**
* 刷新
*/
public static final String REFRESH_TOKEN = "refresh_token";
/**
* 角色前缀
*/
public static final String ROLE_PREFIX = "ROLE_";
/**
* 缓存 oauth 相关前缀
*/
public static final String OAUTH_PREFIX = "oauth:";
/**
* 登陆地址
*/
public static final String LOGIN_URL = "/oauth/token";
/**
* 测试客户端的client_id
*/
public static final String TEST_CLIENT_ID = "test";
}

View File

@@ -0,0 +1,11 @@
package com.hccake.ballcat.oauth.domain;
/**
* 默认的用户属性实现类,没有任何属性
*
* @author Hccake 2021/3/25
* @version 1.0
*/
public class DefaultUserAttributes implements UserAttributes {
}

View File

@@ -0,0 +1,43 @@
package com.hccake.ballcat.oauth.domain;
import lombok.*;
import java.util.Collection;
import java.util.Set;
/**
* 默认的用户资源类
*
* @author Hccake 2021/3/25
* @version 1.0
*/
@Setter
@ToString
@EqualsAndHashCode
@NoArgsConstructor
@AllArgsConstructor
public class DefaultUserResources implements UserResources {
private Set<String> roles;
private Set<String> permissions;
/**
* 获取当前用户所拥有的角色标识集合
* @return List<String>
*/
@Override
public Collection<String> getRoles() {
return roles;
}
/**
* 获取当前用户所拥有的权限标识集合
* @return List<String>
*/
@Override
public Collection<String> getPermissions() {
return permissions;
}
}

View File

@@ -0,0 +1,13 @@
package com.hccake.ballcat.oauth.domain;
import java.io.Serializable;
/**
* 用户属性
*
* @author Hccake 2021/3/25
* @version 1.0
*/
public interface UserAttributes extends Serializable {
}

View File

@@ -0,0 +1,26 @@
package com.hccake.ballcat.oauth.domain;
import java.io.Serializable;
import java.util.Collection;
/**
* 用户资源类
*
* @author Hccake 2021/3/25
* @version 1.0
*/
public interface UserResources extends Serializable {
/**
* 获取当前用户所拥有的角色标识集合
* @return Collection<String>
*/
Collection<String> getRoles();
/**
* 获取当前用户所拥有的权限标识集合
* @return Collection<String>
*/
Collection<String> getPermissions();
}

View File

@@ -0,0 +1,72 @@
package com.hccake.ballcat.oauth.util;
import com.hccake.ballcat.oauth.SysUserDetails;
import com.hccake.ballcat.oauth.constant.SecurityConst;
import com.hccake.ballcat.system.model.entity.SysUser;
import lombok.experimental.UtilityClass;
import org.springframework.security.core.Authentication;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.User;
import java.util.Optional;
/**
* @author Hccake
* @version 1.0
* @date 2019/10/15 11:19
*/
@UtilityClass
public class SecurityUtils {
/**
* 获取Authentication
*/
public Authentication getAuthentication() {
return SecurityContextHolder.getContext().getAuthentication();
}
/**
* 获取系统用户Details
* @param authentication 令牌
* @return SysUser
* <p>
*/
public SysUserDetails getSysUserDetails(Authentication authentication) {
if (authentication == null) {
return null;
}
Object principal = authentication.getPrincipal();
if (principal instanceof SysUserDetails) {
return (SysUserDetails) principal;
}
return null;
}
/**
* 获取用户详情
*/
public SysUserDetails getSysUserDetails() {
Authentication authentication = getAuthentication();
return getSysUserDetails(authentication);
}
/**
* 获取系统用户
*/
public SysUser getSysUser() {
SysUserDetails sysUserDetails = getSysUserDetails();
return sysUserDetails == null ? null : sysUserDetails.getSysUser();
}
/**
* 判断当前是否是测试客户端
* @return boolean 是truefalse
*/
public boolean isTestClient() {
// 测试客户端 跳过密码解密swagger 或 postman测试时使用
Authentication authentication = SecurityUtils.getAuthentication();
User user = (User) Optional.ofNullable(authentication).map(Authentication::getPrincipal).orElse(null);
return user != null && SecurityConst.TEST_CLIENT_ID.equals(user.getUsername());
}
}