/
AbstractAppEngineAuthorizationCodeServlet.java
89 lines (84 loc) · 3.15 KB
/
AbstractAppEngineAuthorizationCodeServlet.java
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
* Copyright (c) 2012 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
* in compliance with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software distributed under the License
* is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
* or implied. See the License for the specific language governing permissions and limitations under
* the License.
*/
package com.google.api.client.extensions.appengine.auth.oauth2;
import com.google.api.client.extensions.servlet.auth.oauth2.AbstractAuthorizationCodeServlet;
import com.google.appengine.api.users.UserServiceFactory;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
/**
* Simple extension of {@link AbstractAuthorizationCodeServlet} that uses the currently logged-in
* Google Account user, as directed in <a
* href="https://cloud.google.com/appengine/docs/standard/java/config/webxml#security-auth">Security
* and Authentication</a>.
*
* <p>Note that if there is no currently logged-in user, {@link #getUserId(HttpServletRequest)} will
* throw a {@link NullPointerException}. Example to require login for all pages:
*
* <pre>
* <security-constraint>
* <web-resource-collection>
* <web-resource-name>any</web-resource-name>
* <url-pattern>/*</url-pattern>
* </web-resource-collection>
* <auth-constraint>
* <role-name>*</role-name>
* </auth-constraint>
* </security-constraint>
* </pre>
*
* <p>Sample usage:
*
* <pre>
* public class ServletSample extends AbstractAppEngineAuthorizationCodeServlet {
*
* @Override
* protected void doGet(HttpServletRequest request, HttpServletResponse response)
* throws IOException {
* // do stuff
* }
*
* @Override
* protected String getRedirectUri(HttpServletRequest req) throws ServletException, IOException {
* GenericUrl url = new GenericUrl(req.getRequestURL().toString());
* url.setRawPath("/oauth2callback");
* return url.build();
* }
*
* @Override
* protected AuthorizationCodeFlow initializeFlow() throws IOException {
* return new AuthorizationCodeFlow.Builder(BearerToken.authorizationHeaderAccessMethod(),
* new UrlFetchTransport(),
* new GsonFactory(),
* new GenericUrl("https://server.example.com/token"),
* new BasicAuthentication("s6BhdRkqt3", "7Fjfp0ZBr1KtDRbnfVdmIw"),
* "s6BhdRkqt3",
* "https://server.example.com/authorize").setCredentialStore(new AppEngineCredentialStore())
* .build();
* }
* }
* </pre>
*
* @since 1.7
* @author Yaniv Inbar
*/
public abstract class AbstractAppEngineAuthorizationCodeServlet
extends AbstractAuthorizationCodeServlet {
private static final long serialVersionUID = 1L;
@Override
protected String getUserId(HttpServletRequest req) throws ServletException, IOException {
// Use GAE Standard's users service to fetch the current user of the application.
return UserServiceFactory.getUserService().getCurrentUser().getUserId();
}
}