Repository navigation
Expand file tree
/
Copy pathHttpServletRequestSentryUserProvider.java
More file actions
55 lines (49 loc) · 2.08 KB
/
Copy pathHttpServletRequestSentryUserProvider.java
File metadata and controls
55 lines (49 loc) · 2.08 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package io.sentry.spring7;
import io.sentry.SentryOptions;
import io.sentry.protocol.User;
import io.sentry.util.Objects;
import jakarta.servlet.http.HttpServletRequest;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
/**
* Resolves user information from {@link HttpServletRequest} obtained via {@link
* RequestContextHolder}.
*/
public final class HttpServletRequestSentryUserProvider implements SentryUserProvider {
private final @NotNull SentryOptions options;
public HttpServletRequestSentryUserProvider(final @NotNull SentryOptions options) {
this.options = Objects.requireNonNull(options, "options are required");
}
@Override
public @Nullable User provideUser() {
if (options.getDataCollectionResolver().isUserInfo()) {
final RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
if (requestAttributes instanceof ServletRequestAttributes) {
final ServletRequestAttributes servletRequestAttributes =
(ServletRequestAttributes) requestAttributes;
final HttpServletRequest request = servletRequestAttributes.getRequest();
final User user = new User();
user.setIpAddress(toIpAddress(request));
if (request.getUserPrincipal() != null) {
user.setUsername(request.getUserPrincipal().getName());
}
return user;
}
}
return null;
}
// it is advised to not use `String#split` method but since we do not have 3rd party libraries
// this is our only option.
@SuppressWarnings("StringSplitter")
private static @NotNull String toIpAddress(final @NotNull HttpServletRequest request) {
final String ipAddress = request.getHeader("X-FORWARDED-FOR");
if (ipAddress != null) {
return ipAddress.contains(",") ? ipAddress.split(",")[0].trim() : ipAddress;
} else {
return request.getRemoteAddr();
}
}
}