Skip to content
This repository was archived by the owner on Dec 28, 2025. It is now read-only.

Commit 8dd07b8

Browse files
committed
add exception check in AuthFilter
1 parent 994673e commit 8dd07b8

File tree

3 files changed

+74
-10
lines changed

3 files changed

+74
-10
lines changed

hubble-be/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
<dependency>
121121
<groupId>com.baidu.hugegraph</groupId>
122122
<artifactId>hugegraph-client</artifactId>
123-
<version>1.9.4</version>
123+
<version>1.9.5</version>
124124
</dependency>
125125

126126
<dependency>

hubble-be/src/main/java/com/baidu/hugegraph/filter/AuthFilter.java

Lines changed: 70 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
package com.baidu.hugegraph.filter;
2121

2222
import java.io.IOException;
23+
import java.io.PrintWriter;
24+
import java.util.Set;
25+
import java.util.function.Supplier;
2326

2427
import javax.annotation.Resource;
2528
import javax.servlet.Filter;
@@ -29,19 +32,32 @@
2932
import javax.servlet.ServletResponse;
3033
import javax.servlet.annotation.WebFilter;
3134
import javax.servlet.http.HttpServletRequest;
35+
import javax.ws.rs.core.MediaType;
3236

3337
import org.apache.commons.lang.StringUtils;
3438
import org.apache.http.HttpHeaders;
39+
import org.springframework.web.bind.annotation.RequestMethod;
3540

41+
import com.baidu.hugegraph.common.Constant;
42+
import com.baidu.hugegraph.common.Response;
3643
import com.baidu.hugegraph.driver.HugeClient;
3744
import com.baidu.hugegraph.config.AuthClientConfiguration;
45+
import com.baidu.hugegraph.util.JsonUtil;
46+
import com.google.common.collect.ImmutableSet;
3847

3948
import lombok.extern.log4j.Log4j2;
4049

4150
@Log4j2
4251
@WebFilter(filterName = "authFilter", urlPatterns = "/*")
4352
public class AuthFilter implements Filter {
4453

54+
private static final String BEARER_TOKEN_PREFIX = "Bearer ";
55+
56+
private static final Set<String> WHITE_API = ImmutableSet.of(
57+
buildPath(RequestMethod.POST,
58+
Constant.API_VERSION + "graph-connections/login")
59+
);
60+
4561
@Resource(name = AuthClientConfiguration.AUTH_CLIENT_NAME)
4662
private HugeClient client;
4763

@@ -51,15 +67,65 @@ public void doFilter(ServletRequest servletRequest,
5167
FilterChain filterChain)
5268
throws IOException, ServletException {
5369
try {
54-
String authorization = ((HttpServletRequest) servletRequest)
55-
.getHeader(HttpHeaders.AUTHORIZATION);
56-
if (StringUtils.isNotEmpty(authorization)) {
57-
this.client.setAuthContext(authorization);
70+
HttpServletRequest request = (HttpServletRequest) servletRequest;
71+
String authorization = request.getHeader(HttpHeaders.AUTHORIZATION);
72+
73+
// Missed token and request uri not in white list
74+
if (StringUtils.isEmpty(authorization) && !isWhiteAPI(request)) {
75+
String msg = "Missed authorization token";
76+
writeResponse(servletResponse, () -> {
77+
return Response.builder()
78+
.status(Constant.STATUS_BAD_REQUEST)
79+
.message(msg)
80+
.build();
81+
});
82+
return;
83+
}
84+
// Illegal token format
85+
if (StringUtils.isNotEmpty(authorization) &&
86+
!authorization.startsWith(BEARER_TOKEN_PREFIX)) {
87+
String msg = "Only HTTP Bearer authentication is supported";
88+
writeResponse(servletResponse, () -> {
89+
return Response.builder()
90+
.status(Constant.STATUS_BAD_REQUEST)
91+
.message(msg)
92+
.build();
93+
});
94+
return;
5895
}
5996

97+
this.client.setAuthContext(authorization);
98+
6099
filterChain.doFilter(servletRequest, servletResponse);
61100
} finally {
62101
this.client.resetAuthContext();
63102
}
64103
}
104+
105+
private static String buildPath(RequestMethod method, String path) {
106+
return buildPath(method.name(), path);
107+
}
108+
109+
private static String buildPath(String method, String path) {
110+
return String.join(":", method, path);
111+
}
112+
113+
private static boolean isWhiteAPI(HttpServletRequest request) {
114+
String url = request.getRequestURI();
115+
return WHITE_API.contains(buildPath(request.getMethod(), url));
116+
}
117+
118+
private void writeResponse(ServletResponse servletResponse,
119+
Supplier<Response> responseSupplier) {
120+
Response response = responseSupplier.get();
121+
122+
servletResponse.setCharacterEncoding("UTF-8");
123+
servletResponse.setContentType(MediaType.APPLICATION_JSON);
124+
125+
try (PrintWriter writer = servletResponse.getWriter()) {
126+
writer.print(JsonUtil.toJson(response));
127+
} catch (IOException e) {
128+
log.error("Response error",e);
129+
}
130+
}
65131
}

hubble-be/src/main/java/com/baidu/hugegraph/service/system/AuthService.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,12 @@
3131
import com.baidu.hugegraph.entity.login.LoginResult;
3232
import com.baidu.hugegraph.entity.user.HubbleUser;
3333
import com.baidu.hugegraph.structure.auth.Login;
34+
import com.baidu.hugegraph.structure.auth.TokenPayload;
3435
import com.baidu.hugegraph.structure.auth.User;
3536

3637
@Service
3738
public class AuthService {
3839

39-
private static final String TOKEN_USER_NAME = "user_name";
40-
private static final String TOKEN_USER_ID = "user_id";
41-
4240
@Resource(name = AuthClientConfiguration.AUTH_CLIENT_NAME)
4341
private HugeClient authClient;
4442

@@ -58,8 +56,8 @@ public void logout() {
5856
}
5957

6058
public HubbleUser getCurrentUser() {
61-
Map<String, Object> payload = this.authClient.auth().verifyToken();
62-
String userId = (String) payload.get(TOKEN_USER_ID);
59+
TokenPayload payload = this.authClient.auth().verifyToken();
60+
String userId = payload.userId();
6361
User user = this.authClient.auth().getUser(userId);
6462

6563
// TODO Set user auth info

0 commit comments

Comments
 (0)