diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/Constant.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/Constant.java new file mode 100644 index 0000000..45be9ad --- /dev/null +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/Constant.java @@ -0,0 +1,44 @@ +/** + * Constant.java + * Created at 2017-04-24 + * Created by Administrator + * Copyright (C) 2016 itkk.org, All rights reserved. + */ +package org.itkk.udf.auth; + +/** + * 描述 : 常量 + * + * @author Administrator + */ +public class Constant { + + /** + * 描述 : 头信息(rms应用名称) + */ + public static final String HEADER_USER_TYPE = "userType"; + + /** + * 身份认证顺序 + */ + public static final int ORDER_IDENTITY = 10000; + + /** + * 权限认证顺序 + */ + public static final int ORDER_PURVIEW = 10001; + + /** + * rms认证顺序 + */ + public static final int ORDER_RMS = 10002; + + + /** + * 描述 : 私有化构造函数 + */ + private Constant() { + + } + +} diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/UserType.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/UserType.java new file mode 100644 index 0000000..5ba167e --- /dev/null +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/UserType.java @@ -0,0 +1,56 @@ +package org.itkk.udf.auth; + +import java.util.HashMap; +import java.util.Map; + +/** + * 描述 : UserType + * + * @author wangkang + */ +public enum UserType { + + /** + * 描述 : 用户 + */ + USER, + /** + * 描述 : 客户端 + */ + CLIENT; + + /** + * mappings + */ + private static final Map mappings = new HashMap<>(); + + /** + * 静态块 + */ + static { + for (UserType userType : values()) { + mappings.put(userType.name(), userType); + } + } + + /** + * 转换为枚举类型 + * + * @param userType 用户类型 + * @return 枚举 + */ + public static UserType resolve(String userType) { + return (userType != null ? mappings.get(userType) : null); + } + + /** + * 匹配 + * + * @param userType 用户类型 + * @return 匹配结果 + */ + public boolean matches(String userType) { + return (this == resolve(userType)); + } + +} diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/AbstractBaseZuulFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/AbstractBaseZuulFilter.java new file mode 100644 index 0000000..7071bca --- /dev/null +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/AbstractBaseZuulFilter.java @@ -0,0 +1,45 @@ +package org.itkk.udf.auth.filter; + +import com.netflix.zuul.ZuulFilter; +import com.netflix.zuul.context.RequestContext; +import org.apache.commons.lang3.StringUtils; +import org.itkk.udf.auth.Constant; +import org.itkk.udf.auth.UserType; +import org.itkk.udf.core.exception.AuthException; + +import javax.servlet.http.HttpServletRequest; + +import static com.netflix.zuul.context.RequestContext.getCurrentContext; + +/** + * AbstractBaseZuulFilter + */ +public abstract class AbstractBaseZuulFilter extends ZuulFilter { + /** + * 判断用户类型 + * + * @param targetUserType 目标用户类型 + * @return 是否匹配 + */ + public boolean checkUserType(UserType targetUserType) { + //获得request + RequestContext ctx = getCurrentContext(); + HttpServletRequest request = ctx.getRequest(); + //获得用户类型 + String userType = request.getHeader(Constant.HEADER_USER_TYPE); + if (StringUtils.isBlank(userType)) { + userType = request.getParameter(Constant.HEADER_USER_TYPE); + } + //判空 + if (StringUtils.isBlank(userType)) { + throw new AuthException("must be set userType"); + } + //匹配 + UserType userTypeEnum = UserType.resolve(userType); + if (userTypeEnum == null) { + throw new AuthException("unknow userType"); + } + //判断是否拦截 & 返回 + return userTypeEnum.equals(targetUserType); + } +} diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientIdentityFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientIdentityFilter.java index 69d6337..8bc12e1 100644 --- a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientIdentityFilter.java +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientIdentityFilter.java @@ -1,7 +1,10 @@ package org.itkk.udf.auth.filter.client; -import com.netflix.zuul.ZuulFilter; import lombok.extern.slf4j.Slf4j; +import org.itkk.udf.auth.Constant; +import org.itkk.udf.auth.UserType; +import org.itkk.udf.auth.filter.AbstractBaseZuulFilter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; @@ -10,7 +13,8 @@ import org.springframework.stereotype.Component; */ @Component @Slf4j -public class ClientIdentityFilter extends ZuulFilter { +@ConditionalOnProperty(value = "org.itkk.auth.filter.client.identity.enabled", matchIfMissing = true) +public class ClientIdentityFilter extends AbstractBaseZuulFilter { @Override public Object run() { @@ -20,7 +24,7 @@ public class ClientIdentityFilter extends ZuulFilter { @Override public boolean shouldFilter() { - return true; + return this.checkUserType(UserType.CLIENT); } @Override @@ -30,8 +34,7 @@ public class ClientIdentityFilter extends ZuulFilter { @Override public int filterOrder() { - final int order = 10000; - return order; + return Constant.ORDER_IDENTITY; } } diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientPurviewFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientPurviewFilter.java index dedea7d..3cfe050 100644 --- a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientPurviewFilter.java +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/client/ClientPurviewFilter.java @@ -1,7 +1,10 @@ package org.itkk.udf.auth.filter.client; -import com.netflix.zuul.ZuulFilter; import lombok.extern.slf4j.Slf4j; +import org.itkk.udf.auth.Constant; +import org.itkk.udf.auth.UserType; +import org.itkk.udf.auth.filter.AbstractBaseZuulFilter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; @@ -10,7 +13,8 @@ import org.springframework.stereotype.Component; */ @Component @Slf4j -public class ClientPurviewFilter extends ZuulFilter { +@ConditionalOnProperty(value = "org.itkk.auth.filter.client.purviews.enabled", matchIfMissing = true) +public class ClientPurviewFilter extends AbstractBaseZuulFilter { @Override public Object run() { @@ -20,7 +24,7 @@ public class ClientPurviewFilter extends ZuulFilter { @Override public boolean shouldFilter() { - return true; + return this.checkUserType(UserType.CLIENT); } @Override @@ -30,8 +34,7 @@ public class ClientPurviewFilter extends ZuulFilter { @Override public int filterOrder() { - final int order = 10001; - return order; + return Constant.ORDER_PURVIEW; } } diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/RmsFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/rms/RmsFilter.java similarity index 92% rename from udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/RmsFilter.java rename to udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/rms/RmsFilter.java index 15b2e97..8cf264c 100644 --- a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/RmsFilter.java +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/rms/RmsFilter.java @@ -1,9 +1,9 @@ -package org.itkk.udf.auth.filter; +package org.itkk.udf.auth.filter.rms; -import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.itkk.udf.auth.filter.AbstractBaseZuulFilter; import org.itkk.udf.core.exception.AuthException; import org.itkk.udf.rms.Constant; import org.itkk.udf.rms.RmsProperties; @@ -22,7 +22,7 @@ import static com.netflix.zuul.context.RequestContext.getCurrentContext; */ @Component @Slf4j -public class RmsFilter extends ZuulFilter { +public class RmsFilter extends AbstractBaseZuulFilter { /** * 描述 : 应用名称 @@ -80,7 +80,6 @@ public class RmsFilter extends ZuulFilter { @Override public int filterOrder() { - final int order = 10002; - return order; + return org.itkk.udf.auth.Constant.ORDER_RMS; } } diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserIdentityFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserIdentityFilter.java index 2107345..506f245 100644 --- a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserIdentityFilter.java +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserIdentityFilter.java @@ -1,7 +1,10 @@ package org.itkk.udf.auth.filter.user; -import com.netflix.zuul.ZuulFilter; import lombok.extern.slf4j.Slf4j; +import org.itkk.udf.auth.Constant; +import org.itkk.udf.auth.UserType; +import org.itkk.udf.auth.filter.AbstractBaseZuulFilter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; @@ -10,7 +13,8 @@ import org.springframework.stereotype.Component; */ @Component @Slf4j -public class UserIdentityFilter extends ZuulFilter { +@ConditionalOnProperty(value = "org.itkk.auth.filter.user.identity.enabled", matchIfMissing = true) +public class UserIdentityFilter extends AbstractBaseZuulFilter { @Override public Object run() { @@ -20,7 +24,7 @@ public class UserIdentityFilter extends ZuulFilter { @Override public boolean shouldFilter() { - return true; + return this.checkUserType(UserType.USER); } @Override @@ -30,8 +34,7 @@ public class UserIdentityFilter extends ZuulFilter { @Override public int filterOrder() { - final int order = 10000; - return order; + return Constant.ORDER_IDENTITY; } } diff --git a/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserPurviewFilter.java b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserPurviewFilter.java new file mode 100644 index 0000000..ad786da --- /dev/null +++ b/udf-starter-auth/src/main/java/org/itkk/udf/auth/filter/user/UserPurviewFilter.java @@ -0,0 +1,40 @@ +package org.itkk.udf.auth.filter.user; + +import lombok.extern.slf4j.Slf4j; +import org.itkk.udf.auth.Constant; +import org.itkk.udf.auth.UserType; +import org.itkk.udf.auth.filter.AbstractBaseZuulFilter; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; +import org.springframework.stereotype.Component; + +/** + * PurviewFilter + */ +@Component +@Slf4j +@ConditionalOnProperty(value = "org.itkk.auth.filter.user.purview.enabled", matchIfMissing = true) +public class UserPurviewFilter extends AbstractBaseZuulFilter { + + @Override + public Object run() { + log.info("UserPurviewFilter.run"); + return null; + } + + @Override + public boolean shouldFilter() { + return this.checkUserType(UserType.USER); + } + + @Override + public String filterType() { + return FilterConstants.PRE_TYPE; + } + + @Override + public int filterOrder() { + return Constant.ORDER_PURVIEW; + } + +}