Skip to content

Commit d6ced8d

Browse files
PLUGINAPI-42 Deprecate javax.servlet usage in org.sonar.api.security package
1 parent 2bdd52d commit d6ced8d

File tree

6 files changed

+98
-11
lines changed

6 files changed

+98
-11
lines changed

plugin-api/src/main/java/org/sonar/api/security/Authenticator.java

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
import javax.servlet.http.HttpServletRequest;
2424
import org.sonar.api.ExtensionPoint;
2525
import org.sonar.api.server.ServerSide;
26+
import org.sonar.api.server.http.HttpRequest;
27+
import org.sonar.api.server.http.JavaxHttpRequest;
2628

2729
import static java.util.Objects.requireNonNull;
2830

@@ -43,13 +45,31 @@ public abstract class Authenticator {
4345
public static final class Context {
4446
private String username;
4547
private String password;
48+
/**
49+
* @deprecated since 9.16 use {@link #httpRequest} instead
50+
*/
51+
@Deprecated(since = "9.16", forRemoval = true)
4652
private HttpServletRequest request;
53+
private HttpRequest httpRequest;
4754

55+
/**
56+
* @deprecated since 9.16 use {@link #Context(String, String, HttpRequest)} instead
57+
*/
58+
@Deprecated(since = "9.16", forRemoval = true)
4859
public Context(@Nullable String username, @Nullable String password, HttpServletRequest request) {
4960
requireNonNull(request);
5061
this.request = request;
5162
this.username = username;
5263
this.password = password;
64+
this.httpRequest = new JavaxHttpRequest(request);
65+
}
66+
67+
public Context(@Nullable String username, @Nullable String password, HttpRequest httpRequest) {
68+
requireNonNull(httpRequest);
69+
this.httpRequest = httpRequest;
70+
this.username = username;
71+
this.password = password;
72+
this.request = (HttpServletRequest) httpRequest.getRawRequest();
5373
}
5474

5575
/**
@@ -66,8 +86,19 @@ public String getPassword() {
6686
return password;
6787
}
6888

89+
/**
90+
* @deprecated since 9.16. Use {@link #getHttpRequest()} instead.
91+
*/
92+
@Deprecated(since = "9.16", forRemoval = true)
6993
public HttpServletRequest getRequest() {
7094
return request;
7195
}
96+
97+
/**
98+
* @since 9.16
99+
*/
100+
public HttpRequest getHttpRequest() {
101+
return httpRequest;
102+
}
72103
}
73104
}

plugin-api/src/main/java/org/sonar/api/security/ExternalGroupsProvider.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@
2222
import java.util.Collection;
2323
import javax.annotation.CheckForNull;
2424
import javax.servlet.http.HttpServletRequest;
25+
import org.sonar.api.server.http.HttpRequest;
26+
import org.sonar.api.server.http.JavaxHttpRequest;
2527

2628
/**
2729
* Note that prefix "do" for names of methods is reserved for future enhancements, thus should not be used in subclasses.
@@ -45,19 +47,46 @@ public Collection<String> doGetGroups(Context context) {
4547

4648
public static final class Context {
4749
private String username;
50+
/**
51+
* @deprecated since 9.16 use {@link #httpRequest} instead
52+
*/
53+
@Deprecated(since = "9.16", forRemoval = true)
4854
private HttpServletRequest request;
55+
private HttpRequest httpRequest;
4956

57+
/**
58+
* @deprecated since 9.16 use {@link #Context(String, HttpRequest)} instead
59+
*/
60+
@Deprecated(since = "9.16", forRemoval = true)
5061
public Context(String username, HttpServletRequest request) {
5162
this.username = username;
5263
this.request = request;
64+
this.httpRequest = new JavaxHttpRequest(request);
65+
}
66+
67+
public Context(String username, HttpRequest httpRequest) {
68+
this.username = username;
69+
this.httpRequest = httpRequest;
70+
this.request = (HttpServletRequest) httpRequest.getRawRequest();
5371
}
5472

5573
public String getUsername() {
5674
return username;
5775
}
5876

77+
/**
78+
* @deprecated since 9.16. Use {@link #getHttpRequest()} instead.
79+
*/
80+
@Deprecated(since = "9.16", forRemoval = true)
5981
public HttpServletRequest getRequest() {
6082
return request;
6183
}
84+
85+
/**
86+
* @since 9.16
87+
*/
88+
public HttpRequest getHttpRequest() {
89+
return httpRequest;
90+
}
6291
}
6392
}

plugin-api/src/main/java/org/sonar/api/security/ExternalUsersProvider.java

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@
2121

2222
import javax.annotation.Nullable;
2323
import javax.servlet.http.HttpServletRequest;
24+
import org.sonar.api.server.http.HttpRequest;
25+
import org.sonar.api.server.http.JavaxHttpRequest;
2426

2527
/**
2628
* Note that prefix "do" for names of methods is reserved for future enhancements, thus should not be used in subclasses.
@@ -42,19 +44,46 @@ public UserDetails doGetUserDetails(Context context) {
4244

4345
public static final class Context {
4446
private String username;
47+
/**
48+
* @deprecated since 9.16 use {@link #httpRequest} instead
49+
*/
50+
@Deprecated(since = "9.16", forRemoval = true)
4551
private HttpServletRequest request;
52+
private HttpRequest httpRequest;
4653

54+
/**
55+
* @deprecated since 9.16 use {@link #Context(String, HttpRequest)} instead
56+
*/
57+
@Deprecated(since = "9.16", forRemoval = true)
4758
public Context(@Nullable String username, HttpServletRequest request) {
4859
this.username = username;
4960
this.request = request;
61+
this.httpRequest = new JavaxHttpRequest(request);
62+
}
63+
64+
public Context(@Nullable String username, HttpRequest httpRequest) {
65+
this.username = username;
66+
this.httpRequest = httpRequest;
67+
this.request = (HttpServletRequest) httpRequest.getRawRequest();
5068
}
5169

5270
public String getUsername() {
5371
return username;
5472
}
5573

74+
/**
75+
* @deprecated since 9.16. Use {@link #getHttpRequest()} instead.
76+
*/
77+
@Deprecated(since = "9.16", forRemoval = true)
5678
public HttpServletRequest getRequest() {
5779
return request;
5880
}
81+
82+
/**
83+
* @since 9.16
84+
*/
85+
public HttpRequest getHttpRequest() {
86+
return httpRequest;
87+
}
5988
}
6089
}

plugin-api/src/test/java/org/sonar/api/security/ExternalGroupsProviderTest.java

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,13 @@
2020
package org.sonar.api.security;
2121

2222
import com.google.common.base.Preconditions;
23-
import java.util.ArrayList;
2423
import java.util.Arrays;
2524
import java.util.Collection;
2625
import java.util.HashMap;
2726
import java.util.Map;
2827
import javax.annotation.Nullable;
29-
import javax.servlet.http.HttpServletRequest;
3028
import org.junit.Test;
29+
import org.sonar.api.server.http.HttpRequest;
3130

3231
import static org.assertj.core.api.Assertions.assertThat;
3332
import static org.mockito.Mockito.mock;
@@ -40,7 +39,7 @@ public void doGetGroupsNoOverride() {
4039

4140
String userName = "foo";
4241
assertThat(groupsProvider.doGetGroups(new ExternalGroupsProvider.Context(userName,
43-
mock(HttpServletRequest.class)))).isNull();
42+
mock(HttpRequest.class)))).isNull();
4443
}
4544

4645
@Test
@@ -51,7 +50,7 @@ public void doGetGroupsTests() {
5150
@Override
5251
public Collection<String> doGetGroups(Context context) {
5352
Preconditions.checkNotNull(context.getUsername());
54-
Preconditions.checkNotNull(context.getRequest());
53+
Preconditions.checkNotNull(context.getHttpRequest());
5554

5655
return userGroupsMap.get(context.getUsername());
5756
}
@@ -63,7 +62,7 @@ public Collection<String> doGetGroups(Context context) {
6362
private static void runDoGetGroupsTests(ExternalGroupsProvider groupsProvider, Map<String, Collection<String>> userGroupsMap) {
6463
for (Map.Entry<String, Collection<String>> userGroupMapEntry : userGroupsMap.entrySet()) {
6564
Collection<String> groups = groupsProvider.doGetGroups(new ExternalGroupsProvider.Context(
66-
userGroupMapEntry.getKey(), mock(HttpServletRequest.class)));
65+
userGroupMapEntry.getKey(), mock(HttpRequest.class)));
6766
assertThat(groups).isEqualTo(userGroupMapEntry.getValue());
6867
}
6968
}

plugin-api/src/test/java/org/sonar/api/security/ExternalUsersProviderTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@
2121

2222
import com.google.common.base.Preconditions;
2323
import org.junit.Test;
24-
25-
import javax.servlet.http.HttpServletRequest;
24+
import org.sonar.api.server.http.HttpRequest;
2625

2726
import static org.assertj.core.api.Assertions.assertThat;
2827
import static org.mockito.Mockito.mock;
@@ -35,14 +34,14 @@ public void doGetUserDetails() {
3534
@Override
3635
public UserDetails doGetUserDetails(Context context) {
3736
Preconditions.checkNotNull(context.getUsername());
38-
Preconditions.checkNotNull(context.getRequest());
37+
Preconditions.checkNotNull(context.getHttpRequest());
3938
UserDetails user = new UserDetails();
4039
user.setName(context.getUsername());
4140
user.setEmail("[email protected]");
4241
return user;
4342
}
4443
};
45-
UserDetails user = provider.doGetUserDetails(new ExternalUsersProvider.Context("foo", mock(HttpServletRequest.class)));
44+
UserDetails user = provider.doGetUserDetails(new ExternalUsersProvider.Context("foo", mock(HttpRequest.class)));
4645

4746
assertThat(user.getName()).isEqualTo("foo");
4847
assertThat(user.getEmail()).isEqualTo("[email protected]");

plugin-api/src/test/java/org/sonar/api/security/SecurityRealmTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121

2222
import org.junit.Test;
2323

24-
import javax.servlet.http.HttpServletRequest;
24+
import org.sonar.api.server.http.HttpRequest;
2525

2626
import static org.assertj.core.api.Assertions.assertThat;
2727
import static org.mockito.Mockito.mock;
@@ -52,7 +52,7 @@ public LoginPasswordAuthenticator getLoginPasswordAuthenticator() {
5252
}
5353
};
5454
Authenticator proxy = realm.doGetAuthenticator();
55-
Authenticator.Context context = new Authenticator.Context("foo", "bar", mock(HttpServletRequest.class));
55+
Authenticator.Context context = new Authenticator.Context("foo", "bar", mock(HttpRequest.class));
5656
proxy.doAuthenticate(context);
5757

5858
verify(deprecatedAuthenticator).authenticate("foo", "bar");

0 commit comments

Comments
 (0)