♻️ system, oauth 相关模块拆分
This commit is contained in:
28
ballcat-oauth/ballcat-oauth-model/pom.xml
Normal file
28
ballcat-oauth/ballcat-oauth-model/pom.xml
Normal 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>
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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";
|
||||
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.hccake.ballcat.oauth.domain;
|
||||
|
||||
/**
|
||||
* 默认的用户属性实现类,没有任何属性
|
||||
*
|
||||
* @author Hccake 2021/3/25
|
||||
* @version 1.0
|
||||
*/
|
||||
public class DefaultUserAttributes implements UserAttributes {
|
||||
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -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 {
|
||||
|
||||
}
|
||||
@@ -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();
|
||||
|
||||
}
|
||||
@@ -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 是:true,否:false
|
||||
*/
|
||||
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());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user