未验证 提交 8106f70f 编写于 作者: sinat_25235033's avatar sinat_25235033 提交者: GitHub

Feature context path (#42)

* support context path setting
上级 3d3a35c2
...@@ -79,15 +79,15 @@ public class DefaultSurenessConfig { ...@@ -79,15 +79,15 @@ public class DefaultSurenessConfig {
if (SUPPORT_JAX_RS.equals(supportContainer)) { if (SUPPORT_JAX_RS.equals(supportContainer)) {
subjectCreates = Arrays.asList( subjectCreates = Arrays.asList(
new NoneSubjectJaxRsCreator(), new NoneSubjectJaxRsCreator(),
new DigestSubjectJaxRsCreator(),
new BasicSubjectJaxRsCreator(), new BasicSubjectJaxRsCreator(),
new JwtSubjectJaxRsCreator(), new JwtSubjectJaxRsCreator());
new DigestSubjectJaxRsCreator());
} else { } else {
subjectCreates = Arrays.asList( subjectCreates = Arrays.asList(
new NoneSubjectServletCreator(), new NoneSubjectServletCreator(),
new DigestSubjectServletCreator(),
new BasicSubjectServletCreator(), new BasicSubjectServletCreator(),
new JwtSubjectServletCreator(), new JwtSubjectServletCreator());
new DigestSubjectServletCreator());
} }
subjectFactory.registerSubjectCreator(subjectCreates); subjectFactory.registerSubjectCreator(subjectCreates);
if (logger.isDebugEnabled()) { if (logger.isDebugEnabled()) {
......
package com.usthe.sureness.matcher; package com.usthe.sureness.matcher;
import java.util.Set; import java.util.Set;
import java.util.concurrent.atomic.AtomicReference;
/** /**
* path tree resource data provider * path tree resource data provider
...@@ -9,6 +10,23 @@ import java.util.Set; ...@@ -9,6 +10,23 @@ import java.util.Set;
*/ */
public interface PathTreeProvider { public interface PathTreeProvider {
/**
* web server context path set, default is null
* Please sync with your server context path settings here
* eg: springboot context path is: server.servlet.context-path = v2
* tomcat context path is: <context path="v2">
*/
AtomicReference<String> contextPathRef = new AtomicReference<String>();
/**
* set context path
* Please sync with your server context path settings here
* @param contextPath context path
*/
default void setContextPath(String contextPath) {
contextPathRef.set(contextPath);
}
/** /**
* Interface for loading URL resources. * Interface for loading URL resources.
* Can load data from database, text load data, etc. * Can load data from database, text load data, etc.
......
...@@ -58,14 +58,14 @@ public class SurenessSecurityManager implements SecurityManager { ...@@ -58,14 +58,14 @@ public class SurenessSecurityManager implements SecurityManager {
} }
@Override @Override
public SubjectSum checkIn(Subject token) throws BaseSurenessException { public SubjectSum checkIn(Subject subject) throws BaseSurenessException {
// Determine whether the requested resource is a filtered resource // Determine whether the requested resource is a filtered resource
// if yes, pass directly // if yes, pass directly
if (pathRoleMatcher.isExcludedResource(token)) { if (pathRoleMatcher.isExcludedResource(subject)) {
return null; return null;
} }
pathRoleMatcher.matchRole(token); pathRoleMatcher.matchRole(subject);
return processorManager.process(token); return processorManager.process(subject);
} }
@Override @Override
......
...@@ -2,6 +2,7 @@ package com.usthe.sureness.provider.annotation; ...@@ -2,6 +2,7 @@ package com.usthe.sureness.provider.annotation;
import com.usthe.sureness.matcher.PathTreeProvider; import com.usthe.sureness.matcher.PathTreeProvider;
import com.usthe.sureness.util.ClassScanner; import com.usthe.sureness.util.ClassScanner;
import com.usthe.sureness.util.SurenessCommonUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -76,7 +77,7 @@ public class AnnotationLoader implements PathTreeProvider { ...@@ -76,7 +77,7 @@ public class AnnotationLoader implements PathTreeProvider {
} }
} }
} }
return resource; return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resource);
} }
@Override @Override
...@@ -99,7 +100,7 @@ public class AnnotationLoader implements PathTreeProvider { ...@@ -99,7 +100,7 @@ public class AnnotationLoader implements PathTreeProvider {
} }
} }
} }
return resource; return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resource);
} }
public List<String> getScanPackages() { public List<String> getScanPackages() {
......
...@@ -5,6 +5,7 @@ import com.usthe.sureness.matcher.SurenessLoadDataException; ...@@ -5,6 +5,7 @@ import com.usthe.sureness.matcher.SurenessLoadDataException;
import com.usthe.sureness.provider.DefaultAccount; import com.usthe.sureness.provider.DefaultAccount;
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.util.SurenessCommonUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -41,10 +42,13 @@ public class DocumentResourceDefaultProvider implements PathTreeProvider, Surene ...@@ -41,10 +42,13 @@ public class DocumentResourceDefaultProvider implements PathTreeProvider, Surene
entity = DocumentResourceAccess.loadConfig(); entity = DocumentResourceAccess.loadConfig();
} }
List<String> resource = entity.getResourceRole(); List<String> resource = entity.getResourceRole();
Set<String> resourceSet;
if (resource != null) { if (resource != null) {
return new HashSet<>(entity.getResourceRole()); resourceSet = new HashSet<>(resource);
} else {
resourceSet = new HashSet<>();
} }
return new HashSet<>(); return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resourceSet);
} catch (IOException e) { } catch (IOException e) {
logger.error("load config data from yaml file error: ", e); logger.error("load config data from yaml file error: ", e);
throw new SurenessLoadDataException(e.getMessage()); throw new SurenessLoadDataException(e.getMessage());
...@@ -58,14 +62,17 @@ public class DocumentResourceDefaultProvider implements PathTreeProvider, Surene ...@@ -58,14 +62,17 @@ public class DocumentResourceDefaultProvider implements PathTreeProvider, Surene
entity = DocumentResourceAccess.loadConfig(); entity = DocumentResourceAccess.loadConfig();
} }
List<String> resource = entity.getExcludedResource(); List<String> resource = entity.getExcludedResource();
Set<String> resourceSet;
if (resource != null) { if (resource != null) {
return new HashSet<>(resource); resourceSet = new HashSet<>(resource);
} else {
resourceSet = new HashSet<>();
} }
return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resourceSet);
} catch (IOException e) { } catch (IOException e) {
logger.error("load config data from yaml file error: ", e); logger.error("load config data from yaml file error: ", e);
throw new SurenessLoadDataException(e.getMessage()); throw new SurenessLoadDataException(e.getMessage());
} }
return new HashSet<>();
} }
@Override @Override
......
package com.usthe.sureness.util; package com.usthe.sureness.util;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.container.ContainerRequestContext;
import java.util.Random; import java.util.Random;
import java.util.Set;
import java.util.stream.Collectors;
/** /**
* common util * common util
...@@ -19,31 +18,10 @@ public class SurenessCommonUtil { ...@@ -19,31 +18,10 @@ public class SurenessCommonUtil {
private static final String IPHONE = "iPhone"; private static final String IPHONE = "iPhone";
private static final String WINDOWS = "Windows"; private static final String WINDOWS = "Windows";
private static final String CHROME = "Chrome"; private static final String CHROME = "Chrome";
private static final String PATH_SPLIT = "/";
private static final String RANDOM_CHAR = "abcdefghijklmnopqrstuvwxyz0123456789"; private static final String RANDOM_CHAR = "abcdefghijklmnopqrstuvwxyz0123456789";
/**
* Deprecated, suggest use findUserAgent(String userAgent)
* @param request HttpServletRequest
* @return userAgent
*/
@Deprecated
public static String findUserAgent(HttpServletRequest request) {
String userAgent = request.getHeader(USER_AGENT);
return findUserAgent(userAgent);
}
/**
* Deprecated, suggest use findUserAgent(String userAgent)
* @param request ContainerRequestContext
* @return userAgent
*/
@Deprecated
public static String findUserAgent(ContainerRequestContext request) {
String userAgent = request.getHeaderString(USER_AGENT);
return findUserAgent(userAgent);
}
/** /**
* match the userAgent * match the userAgent
* @param userAgent string from request * @param userAgent string from request
...@@ -88,4 +66,31 @@ public class SurenessCommonUtil { ...@@ -88,4 +66,31 @@ public class SurenessCommonUtil {
} }
return sb.toString(); return sb.toString();
} }
/**
* Splice the contextPath to the head of the each uriResource
* @param contextPath context path eg: "/v2"
* @param uriResource set of uriResource eg: "/school/book===get===[role1]"
* @return set of uriResource eg: "/v2/school/book===get===[role1]"
*/
public static Set<String> attachContextPath(String contextPath, Set<String> uriResource) {
if (contextPath == null || "".equals(contextPath) || uriResource == null || uriResource.isEmpty()) {
return uriResource;
}
// format context path
contextPath = contextPath.toLowerCase().trim();
contextPath = contextPath.replace("//", "/");
if (!contextPath.startsWith(PATH_SPLIT)) {
contextPath = PATH_SPLIT.concat(contextPath);
}
if (contextPath.endsWith(PATH_SPLIT)) {
contextPath = contextPath.substring(0, contextPath.length() - 1);
}
final String finalContextPath = contextPath;
return uriResource.stream().map(resource ->
resource.startsWith(PATH_SPLIT)
? finalContextPath.concat(resource)
: finalContextPath.concat(PATH_SPLIT).concat(resource)
).collect(Collectors.toSet());
}
} }
...@@ -2,6 +2,7 @@ package com.usthe.sureness.sample.tom.sureness.provider; ...@@ -2,6 +2,7 @@ package com.usthe.sureness.sample.tom.sureness.provider;
import com.usthe.sureness.matcher.PathTreeProvider; import com.usthe.sureness.matcher.PathTreeProvider;
import com.usthe.sureness.sample.tom.service.ResourceService; import com.usthe.sureness.sample.tom.service.ResourceService;
import com.usthe.sureness.util.SurenessCommonUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -21,13 +22,13 @@ public class ResourceProvider implements PathTreeProvider { ...@@ -21,13 +22,13 @@ public class ResourceProvider implements PathTreeProvider {
@Override @Override
public Set<String> providePathData() { public Set<String> providePathData() {
return resourceService.getAllEnableResourcePath(); return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resourceService.getAllEnableResourcePath());
} }
@Override @Override
public Set<String> provideExcludedResource() { public Set<String> provideExcludedResource() {
return resourceService.getAllDisableResourcePath(); return SurenessCommonUtil.attachContextPath(contextPathRef.get(), resourceService.getAllDisableResourcePath());
} }
} }
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册