未验证 提交 d3d0c18e 编写于 作者: J Jhon Baron 提交者: GitHub

[Refactor #1] - Better way to validate, imports and avoid duplicated code. (#134)

* updated ---> {
 - There was a little code refactor dedicated to avoid :
 * null or not null validation, use objets class
 * bad imports with overload of resources
 * there was code which were not being used so --> remove
 * duplication of code is very common
}

* Update core/src/main/java/com/usthe/sureness/matcher/PathTreeProvider.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/processor/support/DigestProcessor.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/processor/support/DigestProcessor.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/processor/support/DigestProcessor.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/matcher/DefaultPathRoleMatcher.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/processor/support/DigestProcessor.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/processor/support/DigestProcessor.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update core/src/main/java/com/usthe/sureness/matcher/DefaultPathRoleMatcher.java
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>

* Update DefaultPathRoleMatcher.java
Co-authored-by: NJhon Camilo Baron Berdugo <jbaron@mutualser.org>
Co-authored-by: sinat_25235033's avatartomsun28 <tomsun28@outlook.com>
上级 b87a08f3
...@@ -5,6 +5,7 @@ import com.usthe.sureness.util.SurenessConstant; ...@@ -5,6 +5,7 @@ import com.usthe.sureness.util.SurenessConstant;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import static java.util.Objects.isNull;
/** /**
* attach auth success subject info with servlet request session * attach auth success subject info with servlet request session
...@@ -18,7 +19,7 @@ public class AttachSessionServletHandler implements SuccessHandler{ ...@@ -18,7 +19,7 @@ public class AttachSessionServletHandler implements SuccessHandler{
if (request instanceof HttpServletRequest) { if (request instanceof HttpServletRequest) {
HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpSession httpSession = servletRequest.getSession(); HttpSession httpSession = servletRequest.getSession();
if (httpSession.isNew() || httpSession.getAttribute(SurenessConstant.PRINCIPAL) == null) { if (isHttpSessionValid(httpSession)) {
httpSession.setAttribute(SurenessConstant.PRINCIPAL, subjectSum.getPrincipal()); httpSession.setAttribute(SurenessConstant.PRINCIPAL, subjectSum.getPrincipal());
httpSession.setAttribute(SurenessConstant.PRINCIPALS, subjectSum.getPrincipalMap()); httpSession.setAttribute(SurenessConstant.PRINCIPALS, subjectSum.getPrincipalMap());
httpSession.setAttribute(SurenessConstant.ROLES, subjectSum.getRoles()); httpSession.setAttribute(SurenessConstant.ROLES, subjectSum.getRoles());
...@@ -26,4 +27,8 @@ public class AttachSessionServletHandler implements SuccessHandler{ ...@@ -26,4 +27,8 @@ public class AttachSessionServletHandler implements SuccessHandler{
} }
} }
private boolean isHttpSessionValid(HttpSession httpSession) {
return httpSession.isNew() || isNull(httpSession.getAttribute(SurenessConstant.PRINCIPAL));
}
} }
...@@ -6,6 +6,8 @@ import org.slf4j.LoggerFactory; ...@@ -6,6 +6,8 @@ import org.slf4j.LoggerFactory;
import java.util.LinkedList; import java.util.LinkedList;
import java.util.List; import java.util.List;
import static java.util.Objects.isNull;
import static java.util.Objects.nonNull;
/** /**
* the manager for successHandler * the manager for successHandler
...@@ -24,7 +26,7 @@ public class HandlerManager { ...@@ -24,7 +26,7 @@ public class HandlerManager {
* @param request http request * @param request http request
*/ */
public void hand(SubjectSum subjectSum, Object request) { public void hand(SubjectSum subjectSum, Object request) {
if (successHandlers != null) { if (nonNull(successHandlers)) {
for (SuccessHandler successHandler : successHandlers) { for (SuccessHandler successHandler : successHandlers) {
try { try {
successHandler.processHandler(subjectSum, request); successHandler.processHandler(subjectSum, request);
...@@ -36,7 +38,7 @@ public class HandlerManager { ...@@ -36,7 +38,7 @@ public class HandlerManager {
} }
public void registerHandler(List<SuccessHandler> handlers) { public void registerHandler(List<SuccessHandler> handlers) {
if (successHandlers == null) { if (isNull(successHandlers)) {
successHandlers = handlers; successHandlers = handlers;
} else { } else {
successHandlers.addAll(handlers); successHandlers.addAll(handlers);
...@@ -44,7 +46,7 @@ public class HandlerManager { ...@@ -44,7 +46,7 @@ public class HandlerManager {
} }
public void registerHandler(SuccessHandler handler) { public void registerHandler(SuccessHandler handler) {
if (successHandlers == null) { if (isNull(successHandlers)) {
successHandlers = new LinkedList<>(); successHandlers = new LinkedList<>();
} }
successHandlers.add(handler); successHandlers.add(handler);
......
...@@ -6,7 +6,15 @@ import com.usthe.sureness.subject.Subject; ...@@ -6,7 +6,15 @@ import com.usthe.sureness.subject.Subject;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*; import java.util.Set;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Arrays;
import java.util.HashSet;
import static java.util.Objects.nonNull;
import static java.util.Objects.isNull;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
...@@ -47,7 +55,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -47,7 +55,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
String targetResource = (String) subject.getTargetResource(); String targetResource = (String) subject.getTargetResource();
//[role1,role2,role3], [role1], [], null //[role1,role2,role3], [role1], [], null
String matchRoleString = root.searchPathFilterRoles(targetResource); String matchRoleString = root.searchPathFilterRoles(targetResource);
if (matchRoleString != null && matchRoleString.startsWith(LEFT_CON) if (nonNull(matchRoleString) && matchRoleString.startsWith(LEFT_CON)
&& matchRoleString.endsWith(RIGHT_CON)) { && matchRoleString.endsWith(RIGHT_CON)) {
if (NULL_ROLE.equals(matchRoleString)) { if (NULL_ROLE.equals(matchRoleString)) {
subject.setSupportRoles(new ArrayList<>(0)); subject.setSupportRoles(new ArrayList<>(0));
...@@ -64,20 +72,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -64,20 +72,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
checkComponentInit(); checkComponentInit();
Set<String> resources = new HashSet<>(); Set<String> resources = new HashSet<>();
Set<String> excludeResources = new HashSet<>(); Set<String> excludeResources = new HashSet<>();
for (PathTreeProvider provider : pathTreeProviderList) { iterateOverPathTreeProviderList(resources, excludeResources);
Set<String> resourceTmp = provider.providePathData();
Set<String> excludeResourceTmp = provider.provideExcludedResource();
if (resourceTmp != null) {
resources.addAll(resourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} providePathData is null", provider);
}
if (excludeResourceTmp != null) {
excludeResources.addAll(excludeResourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} provideExcludedResource is null", provider);
}
}
root.buildTree(resources); root.buildTree(resources);
excludeResources = excludeResources.stream() excludeResources = excludeResources.stream()
...@@ -92,20 +87,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -92,20 +87,7 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
checkComponentInit(); checkComponentInit();
Set<String> resources = new HashSet<>(); Set<String> resources = new HashSet<>();
Set<String> excludeResources = new HashSet<>(); Set<String> excludeResources = new HashSet<>();
for (PathTreeProvider provider : pathTreeProviderList) { iterateOverPathTreeProviderList(resources, excludeResources);
Set<String> resourceTmp = provider.providePathData();
Set<String> excludeResourceTmp = provider.provideExcludedResource();
if (resourceTmp != null) {
resources.addAll(resourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} providePathData is null", provider);
}
if (excludeResourceTmp != null) {
excludeResources.addAll(excludeResourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} provideExcludedResource is null", provider);
}
}
root.rebuildTree(resources); root.rebuildTree(resources);
excludeResources = excludeResources.stream() excludeResources = excludeResources.stream()
...@@ -118,22 +100,22 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -118,22 +100,22 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
public boolean isExcludedResource(Subject request) { public boolean isExcludedResource(Subject request) {
checkComponentInit(); checkComponentInit();
String exclude = excludeRoot.searchPathFilterRoles((String) request.getTargetResource()); String exclude = excludeRoot.searchPathFilterRoles((String) request.getTargetResource());
return exclude != null && exclude.equals(EXCLUDE_ROLE); return nonNull(exclude) && exclude.equals(EXCLUDE_ROLE);
} }
private void checkComponentInit() { private void checkComponentInit() {
if (pathTreeProviderList == null) { if (isNull(pathTreeProviderList)) {
throw new SurenessNoInitException("DefaultPathRoleMatcher init error : component init not complete"); throw new SurenessNoInitException("DefaultPathRoleMatcher init error : component init not complete");
} }
} }
private void clearTree() { private void clearTree() {
root.clearTree(); root.clearTree();
excludeRoot.clearTree(); excludeRoot.clearTree();
} }
public void setPathTreeProvider(PathTreeProvider pathTreeProvider) { public void setPathTreeProvider(PathTreeProvider pathTreeProvider) {
if (pathTreeProviderList == null) { if (isNull(pathTreeProviderList)) {
pathTreeProviderList = new LinkedList<>(); pathTreeProviderList = new LinkedList<>();
} }
pathTreeProviderList.add(pathTreeProvider); pathTreeProviderList.add(pathTreeProvider);
...@@ -142,7 +124,6 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -142,7 +124,6 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
public void setPathTreeProviderList(List<PathTreeProvider> providerList) { public void setPathTreeProviderList(List<PathTreeProvider> providerList) {
pathTreeProviderList = providerList; pathTreeProviderList = providerList;
} }
public DefaultPathRoleMatcher addPathTreeProvider(PathTreeProvider pathTreeProvider) { public DefaultPathRoleMatcher addPathTreeProvider(PathTreeProvider pathTreeProvider) {
if (pathTreeProviderList == null) { if (pathTreeProviderList == null) {
pathTreeProviderList = new LinkedList<>(); pathTreeProviderList = new LinkedList<>();
...@@ -150,4 +131,22 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher { ...@@ -150,4 +131,22 @@ public class DefaultPathRoleMatcher implements TreePathRoleMatcher {
pathTreeProviderList.add(pathTreeProvider); pathTreeProviderList.add(pathTreeProvider);
return this; return this;
} }
private void iterateOverPathTreeProviderList(Set<String> resources, Set<String> excludeResources) {
for (PathTreeProvider provider : pathTreeProviderList) {
Set<String> resourceTmp = provider.providePathData();
Set<String> excludeResourceTmp = provider.provideExcludedResource();
if (nonNull(resourceTmp)) {
resources.addAll(resourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} providePathData is null", provider);
}
if (nonNull(excludeResourceTmp)) {
excludeResources.addAll(excludeResourceTmp);
} else {
logger.warn("sureness - pathTreeProvider: {} provideExcludedResource is null", provider);
}
}
}
} }
...@@ -17,7 +17,6 @@ public interface PathTreeProvider { ...@@ -17,7 +17,6 @@ public interface PathTreeProvider {
* tomcat context path is: <context path="v2"> * tomcat context path is: <context path="v2">
*/ */
AtomicReference<String> CONTEXT_PATH_REF = new AtomicReference<>(); AtomicReference<String> CONTEXT_PATH_REF = new AtomicReference<>();
/** /**
* set context path * set context path
* Please sync with your server context path settings here * Please sync with your server context path settings here
......
...@@ -4,7 +4,12 @@ package com.usthe.sureness.matcher.util; ...@@ -4,7 +4,12 @@ package com.usthe.sureness.matcher.util;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.*; import java.util.HashMap;
import java.util.Map;
import java.util.Queue;
import java.util.Set;
import java.util.LinkedList;
import java.util.List;
import java.util.regex.Pattern; import java.util.regex.Pattern;
/** /**
...@@ -447,17 +452,11 @@ public class TirePathTree { ...@@ -447,17 +452,11 @@ public class TirePathTree {
return data; return data;
} }
private void setData(String data) {
this.data = data;
}
private Map<String, Node> getChildren() { private Map<String, Node> getChildren() {
return children; return children;
} }
private void setChildren(Map<String, Node> children) {
this.children = children;
}
public List<String> getPatternChildren() { public List<String> getPatternChildren() {
return patternChildren; return patternChildren;
......
...@@ -12,8 +12,11 @@ import org.slf4j.Logger; ...@@ -12,8 +12,11 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import static java.util.Objects.nonNull;
import static java.util.Objects.isNull;
/** /**
* Authentication authorization entrance * Authentication authorization entrance
* @author tomsun28 * @author tomsun28
...@@ -55,8 +58,7 @@ public class SurenessSecurityManager implements SecurityManager { ...@@ -55,8 +58,7 @@ public class SurenessSecurityManager implements SecurityManager {
* @throws SurenessNoInitException check false not init * @throws SurenessNoInitException check false not init
*/ */
private void checkComponentInit() { private void checkComponentInit() {
if (subjectFactory == null || pathRoleMatcher == null || if (validateSomeOneIsNull(Stream.of(subjectFactory, pathRoleMatcher, processorManager))) {
processorManager == null) {
logger.error("SecurityManager init error : SurenessSecurityManager not init fill component"); logger.error("SecurityManager init error : SurenessSecurityManager not init fill component");
// The component's own related exceptions or configuration line exceptions are not thrown up // The component's own related exceptions or configuration line exceptions are not thrown up
throw new SurenessNoInitException("SurenessSecurityManager not init fill component"); throw new SurenessNoInitException("SurenessSecurityManager not init fill component");
...@@ -83,7 +85,7 @@ public class SurenessSecurityManager implements SecurityManager { ...@@ -83,7 +85,7 @@ public class SurenessSecurityManager implements SecurityManager {
return null; return null;
} }
noTryExcluded = false; noTryExcluded = false;
if (preSubject == null) { if (isNull(preSubject)) {
pathRoleMatcher.matchRole(thisSubject); pathRoleMatcher.matchRole(thisSubject);
preSubject = thisSubject; preSubject = thisSubject;
} else { } else {
...@@ -101,11 +103,15 @@ public class SurenessSecurityManager implements SecurityManager { ...@@ -101,11 +103,15 @@ public class SurenessSecurityManager implements SecurityManager {
} }
private void handSuccess(SubjectSum subjectSum, Object request) { private void handSuccess(SubjectSum subjectSum, Object request) {
if (handlerManager != null) { if (nonNull(handlerManager)) {
handlerManager.hand(subjectSum, request); handlerManager.hand(subjectSum, request);
} }
} }
private boolean validateSomeOneIsNull(final Stream stream) {
return stream.anyMatch(Objects::isNull);
}
@Override @Override
public List<Subject> createSubject(Object var1) { public List<Subject> createSubject(Object var1) {
return subjectFactory.createSubjects(var1); return subjectFactory.createSubjects(var1);
...@@ -139,9 +145,6 @@ public class SurenessSecurityManager implements SecurityManager { ...@@ -139,9 +145,6 @@ public class SurenessSecurityManager implements SecurityManager {
return processorManager; return processorManager;
} }
public HandlerManager getHandlerManager() {
return handlerManager;
}
/** /**
* singleton * singleton
......
...@@ -8,7 +8,7 @@ package com.usthe.sureness.processor.exception; ...@@ -8,7 +8,7 @@ package com.usthe.sureness.processor.exception;
*/ */
public class NeedDigestInfoException extends SurenessAuthenticationException { public class NeedDigestInfoException extends SurenessAuthenticationException {
private String authenticate; private final String authenticate;
public NeedDigestInfoException(String message, String authenticate) { public NeedDigestInfoException(String message, String authenticate) {
super(message); super(message);
......
package com.usthe.sureness.processor.support; package com.usthe.sureness.processor.support;
import com.usthe.sureness.processor.BaseProcessor; import com.usthe.sureness.processor.BaseProcessor;
import com.usthe.sureness.processor.exception.*; import com.usthe.sureness.processor.exception.DisabledAccountException;
import com.usthe.sureness.processor.exception.ExcessiveAttemptsException;
import com.usthe.sureness.processor.exception.IncorrectCredentialsException;
import com.usthe.sureness.processor.exception.UnknownAccountException;
import com.usthe.sureness.processor.exception.SurenessAuthenticationException;
import com.usthe.sureness.processor.exception.NeedDigestInfoException;
import com.usthe.sureness.provider.SurenessAccount; import com.usthe.sureness.provider.SurenessAccount;
import com.usthe.sureness.provider.SurenessAccountProvider; import com.usthe.sureness.provider.SurenessAccountProvider;
import com.usthe.sureness.subject.Subject; import com.usthe.sureness.subject.Subject;
...@@ -12,6 +17,7 @@ import org.slf4j.LoggerFactory; ...@@ -12,6 +17,7 @@ import org.slf4j.LoggerFactory;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.security.MessageDigest; import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import java.security.NoSuchAlgorithmException;
import static java.util.Objects.nonNull;
/** /**
* process digest auth - DigestSubject * process digest auth - DigestSubject
...@@ -87,14 +93,22 @@ public class DigestProcessor extends BaseProcessor { ...@@ -87,14 +93,22 @@ public class DigestProcessor extends BaseProcessor {
return var; return var;
} }
private String getAuthenticate(){ private String getAuthenticate() {
String nonce = calcDigest(String.valueOf(System.currentTimeMillis())); String nonce = calcDigest(String.valueOf(System.currentTimeMillis()));
return "Digest " + "realm=" + realm + ",nonce=" + nonce + ",qop=" + qop; return new StringBuilder()
.append("Digest ")
.append("realm=")
.append(realm)
.append(",nonce=")
.append(nonce)
.append(",qop=")
.append(qop)
.toString();
} }
private String calcDigest(String first, String ... args){ private String calcDigest(String first, String ... args){
StringBuilder stringBuilder = new StringBuilder(first); StringBuilder stringBuilder = new StringBuilder(first);
if (args != null) { if (nonNull(args)) {
for (String str : args){ for (String str : args){
stringBuilder.append(':').append(str); stringBuilder.append(':').append(str);
} }
...@@ -116,7 +130,6 @@ public class DigestProcessor extends BaseProcessor { ...@@ -116,7 +130,6 @@ public class DigestProcessor extends BaseProcessor {
public void setAccountProvider(SurenessAccountProvider provider) { public void setAccountProvider(SurenessAccountProvider provider) {
this.accountProvider = provider; this.accountProvider = provider;
} }
public static void setRealm(String realm) { public static void setRealm(String realm) {
DigestProcessor.realm = realm; DigestProcessor.realm = realm;
} }
...@@ -124,4 +137,5 @@ public class DigestProcessor extends BaseProcessor { ...@@ -124,4 +137,5 @@ public class DigestProcessor extends BaseProcessor {
public static void setQop(String qop) { public static void setQop(String qop) {
DigestProcessor.qop = qop; DigestProcessor.qop = qop;
} }
} }
...@@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory; ...@@ -19,6 +19,7 @@ import org.slf4j.LoggerFactory;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import static java.util.Objects.nonNull;
/** /**
* the processor support jwt - JwtSubject * the processor support jwt - JwtSubject
...@@ -67,7 +68,7 @@ public class JwtProcessor extends BaseProcessor { ...@@ -67,7 +68,7 @@ public class JwtProcessor extends BaseProcessor {
// attention: need to set subject own roles from account // attention: need to set subject own roles from account
var.setPrincipal(claims.getSubject()); var.setPrincipal(claims.getSubject());
List<String> ownRoles = claims.get("roles", List.class); List<String> ownRoles = claims.get("roles", List.class);
if (ownRoles != null) { if (nonNull(ownRoles)) {
var.setOwnRoles(ownRoles); var.setOwnRoles(ownRoles);
} }
PrincipalMap principalMap = new SinglePrincipalMap(); PrincipalMap principalMap = new SinglePrincipalMap();
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册