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

Feature support subject principal map (#66)

* support jwt subject principalMap

* support digest,basic subject principalMap
上级 b1560575
......@@ -6,8 +6,10 @@ import com.usthe.sureness.processor.exception.IncorrectCredentialsException;
import com.usthe.sureness.processor.exception.SurenessAuthenticationException;
import com.usthe.sureness.processor.exception.SurenessAuthorizationException;
import com.usthe.sureness.processor.exception.UnauthorizedException;
import com.usthe.sureness.subject.PrincipalMap;
import com.usthe.sureness.subject.Subject;
import com.usthe.sureness.subject.support.JwtSubject;
import com.usthe.sureness.subject.support.SinglePrincipalMap;
import com.usthe.sureness.util.JsonWebTokenUtil;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.ExpiredJwtException;
......@@ -18,6 +20,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.List;
import java.util.Map;
/**
* the processor support jwt - JwtSubject
......@@ -69,6 +72,11 @@ public class JwtProcessor extends BaseProcessor {
if (ownRoles != null) {
builder.setOwnRoles(ownRoles);
}
PrincipalMap principalMap = new SinglePrincipalMap();
for (Map.Entry<String, Object> claimEntry : claims.entrySet()) {
principalMap.setPrincipal(claimEntry.getKey(), claimEntry.getValue());
}
builder.setPrincipalMap(principalMap);
return builder.build();
}
......
......@@ -53,6 +53,9 @@ public class DigestSubject implements Subject {
/** the Roles which can access this resource above-targetUri **/
private List<String> supportRoles;
/** the map for principal, add your custom principal **/
private PrincipalMap principalMap;
public DigestSubject() {}
private DigestSubject(Builder builder) {
......@@ -69,6 +72,7 @@ public class DigestSubject implements Subject {
this.ownRoles = builder.ownRoles;
this.targetUri = builder.targetUri;
this.supportRoles = builder.supportRoles;
this.principalMap = builder.principalMap;
}
@Override
......@@ -78,7 +82,7 @@ public class DigestSubject implements Subject {
@Override
public PrincipalMap getPrincipalMap() {
return null;
return principalMap;
}
@Override
......@@ -162,6 +166,7 @@ public class DigestSubject implements Subject {
private List<String> ownRoles;
private String targetUri;
private List<String> supportRoles;
private PrincipalMap principalMap;
public Builder(String username, String response) {
this.appId = username;
......@@ -175,6 +180,7 @@ public class DigestSubject implements Subject {
this.ownRoles = (List<String>) subject.getOwnRoles();
this.targetUri = String.valueOf(subject.getTargetResource());
this.supportRoles = (List<String>) subject.getSupportRoles();
this.principalMap = subject.getPrincipalMap();
}
public DigestSubject.Builder setAppId(String appId) {
......@@ -242,6 +248,11 @@ public class DigestSubject implements Subject {
return this;
}
public DigestSubject.Builder setPrincipalMap(PrincipalMap principalMap) {
this.principalMap = principalMap;
return this;
}
public DigestSubject build() {
return new DigestSubject(this);
}
......
......@@ -35,6 +35,9 @@ public class JwtSubject implements Subject {
/** the Roles which can access this resource above-targetUri **/
private List<String> supportRoles;
/** the map for principal, add your custom principal **/
private PrincipalMap principalMap;
private JwtSubject(Builder builder) {
this.appId = builder.appId;
this.jwt = builder.jwt;
......@@ -43,6 +46,7 @@ public class JwtSubject implements Subject {
this.ownRoles = builder.ownRoles;
this.supportRoles = builder.supportRoles;
this.targetUri = builder.targetUri;
this.principalMap = builder.principalMap;
}
@Override
......@@ -52,7 +56,7 @@ public class JwtSubject implements Subject {
@Override
public PrincipalMap getPrincipalMap() {
return null;
return this.principalMap;
}
@Override
......@@ -106,6 +110,7 @@ public class JwtSubject implements Subject {
private List<String> ownRoles;
private String targetUri;
private List<String> supportRoles;
private PrincipalMap principalMap;
public Builder(String jwt) {
this.jwt = jwt;
......@@ -118,6 +123,7 @@ public class JwtSubject implements Subject {
this.ownRoles = (List<String>) subject.getOwnRoles();
this.targetUri = String.valueOf(subject.getTargetResource());
this.supportRoles = (List<String>) subject.getSupportRoles();
this.principalMap = subject.getPrincipalMap();
}
public Builder setPrincipal(String appId) {
......@@ -125,6 +131,11 @@ public class JwtSubject implements Subject {
return this;
}
public Builder setPrincipalMap(PrincipalMap principalMap) {
this.principalMap = principalMap;
return this;
}
public Builder setCredentials(String jwt) {
this.jwt = jwt;
return this;
......
......@@ -32,6 +32,8 @@ public class PasswordSubject implements Subject {
/** the Roles which can access this resource above-targetUri **/
private List<String> supportRoles;
/** the map for principal, add your custom principal **/
private PrincipalMap principalMap;
private PasswordSubject(Builder builder) {
this.appId = builder.appId;
......@@ -40,6 +42,7 @@ public class PasswordSubject implements Subject {
this.ownRoles = builder.ownRoles;
this.targetUri = builder.targetUri;
this.supportRoles = builder.supportRoles;
this.principalMap = builder.principalMap;
}
@Override
......@@ -49,7 +52,7 @@ public class PasswordSubject implements Subject {
@Override
public PrincipalMap getPrincipalMap() {
return null;
return this.principalMap;
}
@Override
......@@ -94,6 +97,7 @@ public class PasswordSubject implements Subject {
private List<String> ownRoles;
private String targetUri;
private List<String> supportRoles;
private PrincipalMap principalMap;
public Builder(String appId, String password) {
this.appId = appId;
......@@ -107,6 +111,7 @@ public class PasswordSubject implements Subject {
this.ownRoles = (List<String>) subject.getOwnRoles();
this.targetUri = String.valueOf(subject.getTargetResource());
this.supportRoles = (List<String>) subject.getSupportRoles();
this.principalMap = subject.getPrincipalMap();
}
public Builder setPrincipal(String appId) {
......@@ -114,6 +119,11 @@ public class PasswordSubject implements Subject {
return this;
}
public Builder setPrincipalMap(PrincipalMap principalMap) {
this.principalMap = principalMap;
return this;
}
public Builder setCredentials(String password) {
this.password = password;
return this;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册