This commit is contained in:
王康
2017-08-20 15:32:44 +08:00
parent aba1a6faec
commit 0e83336379
8 changed files with 213 additions and 20 deletions
@@ -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() {
}
}
@@ -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<String, UserType> 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));
}
}
@@ -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);
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}
@@ -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;
}
}