1.部门邀请 2.app版本增加ssh上传,3.注册页面国际化适配
This commit is contained in:
1 parent
73b874382b
commit
0bde83e9c2
31 files changed
+1372
-61
No files matched your search
+21
-9
@@ -44,7 +44,14 @@ public class PermitAllUrlProperties implements InitializingBean {
|
||||
|
||||
private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}");
|
||||
|
||||
private static final String[] DEFAULT_IGNORE_URLS = new String[]{"/actuator/**", "/error", "/v3/api-docs"};
|
||||
private static final String[] DEFAULT_IGNORE_URLS = new String[]{
|
||||
"/actuator/**",
|
||||
"/error",
|
||||
"/v3/api-docs",
|
||||
// 部门邀请公开接口(免登录);写入默认白名单,避免仅依赖注解扫描遗漏
|
||||
"/dept/invite/preview",
|
||||
"/dept/invite/register"
|
||||
};
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@@ -70,18 +77,23 @@ public class PermitAllUrlProperties implements InitializingBean {
|
||||
|
||||
// 获取方法上边的注解 替代path variable 为 *
|
||||
Inner method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class);
|
||||
Optional.ofNullable(method)
|
||||
.ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
|
||||
.getPatternValues()
|
||||
.forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
|
||||
Optional.ofNullable(method).ifPresent(inner -> addIgnoreUrls(info));
|
||||
|
||||
// 获取类上边的注解, 替代path variable 为 *
|
||||
Inner controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Inner.class);
|
||||
Optional.ofNullable(controller)
|
||||
.ifPresent(inner -> Objects.requireNonNull(info.getPathPatternsCondition())
|
||||
.getPatternValues()
|
||||
.forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, "*"))));
|
||||
Optional.ofNullable(controller).ifPresent(inner -> addIgnoreUrls(info));
|
||||
});
|
||||
}
|
||||
|
||||
private void addIgnoreUrls(RequestMappingInfo info) {
|
||||
Set<String> patterns = new HashSet<>();
|
||||
if (info.getPathPatternsCondition() != null) {
|
||||
patterns.addAll(info.getPathPatternsCondition().getPatternValues());
|
||||
}
|
||||
if (info.getPatternsCondition() != null) {
|
||||
patterns.addAll(info.getPatternsCondition().getPatterns());
|
||||
}
|
||||
patterns.forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, "*")));
|
||||
}
|
||||
|
||||
}
|
||||
+14
@@ -17,18 +17,22 @@
|
||||
package com.bsd.pjcloud.common.security.service;
|
||||
|
||||
import cn.hutool.core.util.ArrayUtil;
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.bsd.pjcloud.admin.api.dto.UserInfo;
|
||||
import com.bsd.pjcloud.admin.api.entity.SysUser;
|
||||
import com.bsd.pjcloud.common.core.constant.CommonConstants;
|
||||
import com.bsd.pjcloud.common.core.constant.SecurityConstants;
|
||||
import com.bsd.pjcloud.common.core.constant.enums.UserTypeEnum;
|
||||
import com.bsd.pjcloud.common.core.util.MsgUtils;
|
||||
import com.bsd.pjcloud.common.security.util.OAuth2ErrorCodesExpand;
|
||||
import org.springframework.core.Ordered;
|
||||
import org.springframework.security.core.GrantedAuthority;
|
||||
import org.springframework.security.core.authority.AuthorityUtils;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
import org.springframework.security.oauth2.core.OAuth2AuthenticationException;
|
||||
import org.springframework.security.oauth2.core.OAuth2Error;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -96,6 +100,16 @@ public interface PjcloudUserDetailsService extends UserDetailsService, Ordered {
|
||||
Collection<? extends GrantedAuthority> authorities = AuthorityUtils
|
||||
.createAuthorityList(dbAuthsSet.toArray(new String[0]));
|
||||
SysUser user = info.getSysUser();
|
||||
// 与 TaskCheckStatusEnum 对齐:审核中/拒绝不可登录(邀请注册等场景仅写 processStatus,不锁账号)
|
||||
String processStatus = user.getProcessStatus();
|
||||
if (StrUtil.equals(processStatus, "1")) {
|
||||
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USER_PENDING_AUDIT,
|
||||
MsgUtils.getSecurityMessage("AbstractUserDetailsAuthenticationProvider.pendingAudit"), ""));
|
||||
}
|
||||
if (StrUtil.equals(processStatus, "3")) {
|
||||
throw new OAuth2AuthenticationException(new OAuth2Error(OAuth2ErrorCodesExpand.USER_AUDIT_REJECTED,
|
||||
MsgUtils.getSecurityMessage("AbstractUserDetailsAuthenticationProvider.auditRejected"), ""));
|
||||
}
|
||||
|
||||
// 构造security用户
|
||||
return new PjcloudUser(user.getUserId(), user.getUsername(), user.getDeptId(), user.getPhone(), user.getAvatar(),
|
||||
|
||||
+6
@@ -18,6 +18,12 @@ public interface OAuth2ErrorCodesExpand {
|
||||
/** 用户禁用 */
|
||||
String USER_DISABLE = "user_disable";
|
||||
|
||||
/** 用户审核中 */
|
||||
String USER_PENDING_AUDIT = "user_pending_audit";
|
||||
|
||||
/** 用户审核拒绝 */
|
||||
String USER_AUDIT_REJECTED = "user_audit_rejected";
|
||||
|
||||
/** 用户过期 */
|
||||
String USER_EXPIRED = "user_expired";
|
||||
|
||||
|
||||
+2
@@ -7,6 +7,8 @@ AbstractUserDetailsAuthenticationProvider.credentialsExpired=Credentials have ex
|
||||
OAuth2ResourceOwnerBaseAuthenticationProvider.tokenExpired=Credentials have expired
|
||||
AbstractUserDetailsAuthenticationProvider.disabled=User is not activated
|
||||
AbstractUserDetailsAuthenticationProvider.locked=User account is locked
|
||||
AbstractUserDetailsAuthenticationProvider.pendingAudit=Account is pending approval. Please wait until approved before signing in
|
||||
AbstractUserDetailsAuthenticationProvider.auditRejected=Account approval was rejected. Sign-in is not allowed
|
||||
AbstractUserDetailsAuthenticationProvider.expired=User account has expired
|
||||
JdbcDaoImpl.notFound=User {0} not found
|
||||
UserDetailsService.notFound=User does not exist
|
||||
|
||||
+2
@@ -29,6 +29,8 @@ OAuth2ResourceOwnerBaseAuthenticationProvider.tokenExpired=\u7528\u6237\u51ED\u8
|
||||
AbstractUserDetailsAuthenticationProvider.disabled=\u7528\u6237\u672A\u6FC0\u6D3B
|
||||
AbstractUserDetailsAuthenticationProvider.expired=\u7528\u6237\u5E10\u53F7\u5DF2\u8FC7\u671F
|
||||
AbstractUserDetailsAuthenticationProvider.locked=\u7528\u6237\u5E10\u53F7\u5DF2\u88AB\u9501\u5B9A
|
||||
AbstractUserDetailsAuthenticationProvider.pendingAudit=\u8D26\u53F7\u5BA1\u6838\u4E2D\uFF0C\u8BF7\u7B49\u5F85\u5BA1\u6279\u901A\u8FC7\u540E\u518D\u767B\u5F55
|
||||
AbstractUserDetailsAuthenticationProvider.auditRejected=\u8D26\u53F7\u5BA1\u6838\u672A\u901A\u8FC7\uFF0C\u65E0\u6CD5\u767B\u5F55
|
||||
AbstractUserDetailsAuthenticationProvider.onlySupports=\u4EC5\u4EC5\u652F\u6301UsernamePasswordAuthenticationToken
|
||||
AbstractUserDetailsAuthenticationProvider.badTenantId=\u65E0\u6548\u7684\u79DF\u6237\u7F16\u53F7:{0}
|
||||
AccountStatusUserDetailsChecker.credentialsExpired=\u7528\u6237\u51ED\u8BC1\u5DF2\u8FC7\u671F
|
||||
|
||||
+2
@@ -7,6 +7,8 @@ AbstractUserDetailsAuthenticationProvider.credentialsExpired=用戶憑證已過
|
||||
OAuth2ResourceOwnerBaseAuthenticationProvider.tokenExpired=用戶憑證已過期
|
||||
AbstractUserDetailsAuthenticationProvider.disabled=用戶未啟用
|
||||
AbstractUserDetailsAuthenticationProvider.locked=用戶帳號已鎖定
|
||||
AbstractUserDetailsAuthenticationProvider.pendingAudit=帳號審核中,請等待審批通過後再登入
|
||||
AbstractUserDetailsAuthenticationProvider.auditRejected=帳號審核未通過,無法登入
|
||||
AbstractUserDetailsAuthenticationProvider.expired=用戶帳號已過期
|
||||
JdbcDaoImpl.notFound=未找到用戶{0}
|
||||
UserDetailsService.notFound=用戶不存在
|
||||
|
||||
Reference in new issue
Block a user