Авторизация в OAuth + Google + scribejava

217
21 сентября 2017, 14:33

Все прикрутил и пример вставил, даже реализовал веб-проект. Но все время возвращает body=null.

Вот код-класс для авторизации:

package com.dj.kz.djooga.users.service;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import com.github.scribejava.apis.GoogleApi20;
import com.github.scribejava.core.builder.ServiceBuilder;
import com.github.scribejava.core.model.OAuth2AccessToken;
import com.github.scribejava.core.model.OAuthRequest;
import com.github.scribejava.core.model.Response;
import com.github.scribejava.core.model.Verb;
import com.github.scribejava.core.oauth.OAuth20Service;
public class UserAuthService {
    private OAuth20Service service;
    private String clientId = "1938140...";
    private String secretId = "MCLXS...";
    private String callback = "http://localhost:8080/djooga-webapp-admin/main";
    private String scope = "https://www.googleapis.com/auth/userinfo.email";
    private static final String PROTECTED_RESOURCE_URL = "https://www.googleapis.com/auth/userinfo.email";
    private OAuth2AccessToken accessToken;
    public UserAuthService(String authService) {
        switch (authService) {
        case "google":
            service = new ServiceBuilder(clientId).apiSecret(secretId).callback(callback).scope(scope)
                    .build(GoogleApi20.instance());
            break;
        default:
            break;
        }
    }
    public String getUserInfo(String code) throws ExecutionException, InterruptedException, IOException {
        this.accessToken = service.getAccessToken(code);
        OAuthRequest rqs = new OAuthRequest(Verb.GET, PROTECTED_RESOURCE_URL);
        service.signRequest(accessToken, rqs);
        Response res = service.execute(rqs);
        return res.toString();
    }
    public String getAuthURL() {
        if (service != null)
            return service.getAuthorizationUrl();
        else
            return "/error";
    }
}

Вот, что возвращает метод getUserInfo:

Response{code=200, message='OK', body='null', headers={Transfer-
Encoding=chunked, null=HTTP/1.1 200 OK, Alt-Svc=quic=":443"; ma=2592000; 
v="39,38,37,35", Server=GSE, X-Content-Type-Options=nosniff, Date=Wed, 20 
Sep 2017 03:07:32 GMT, Accept-Ranges=none, X-Frame-Options=SAMEORIGIN, 
Cache-Control=private, max-age=0, Vary=Accept-Encoding, Expires=Wed, 20 Sep 
2017 03:07:32 GMT, X-XSS-Protection=1; mode=block, Content-Type=text/plain}}

Сервлет на всякий случай:

package com.dj.kz.djooga.webapp.admin;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.dj.kz.djooga.users.service.UserAuthService;
public class MainServlet extends DispatcherServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        System.out.print("ok");
        String code = request.getParameter("code");
        if (code!=null) {            
            UserAuthService uas = new UserAuthService("google");
            System.out.println("code");
            String ui="";
            try {
                ui = uas.getUserInfo(code);
            } catch (ExecutionException e) {
                super.forward("/jsp/error.jsp", request, response);
                e.printStackTrace();
            } catch (InterruptedException e) {
                super.forward("/jsp/error.jsp", request, response);
                e.printStackTrace();
            }
            request.setAttribute("userInfo", ui);
            super.forward("/jsp/welcom.jsp", request, response);
        }
        HttpSession session = request.getSession();
        if (session.getAttribute("userId") == null) {
            String url;
            if (request.getSession().getAttribute("uas") == null) {
                UserAuthService uas = new UserAuthService("google");
                request.getSession().setAttribute("uas", uas);
                url = uas.getAuthURL();
            } else {
                url = ((UserAuthService) request.getSession().getAttribute("uas")).getAuthURL();
            }
            request.setAttribute("authUrl", url);
            super.forward("/jsp/auth.jsp", request, response);
        }
    }
}

И еще один вопрос: при авторизации надо сохранить tocken?

READ ALSO
Как реализовать Fragment.onAttach() в адаптере (RecyclerView.Adapter)

Как реализовать Fragment.onAttach() в адаптере (RecyclerView.Adapter)

Разрабатывается приложение, в котором используются фрагментыПытаюсь реализовать смену фрагмента по нажатию на любой item в recyclerView

207
Immutable объект в Java

Immutable объект в Java

В java все объект могут быть mutable и immutableПонятно, что, например, строка является immutable

238
Java Bean Не инжектит бины

Java Bean Не инжектит бины

Здравствуйте! Второй день пытаюсь пофиксить проблемуВ проекте пытаюсь достать данные из базы, но вылетает NullPointerException

186
Java-Spring: Как выдавать JSON со связями?

Java-Spring: Как выдавать JSON со связями?

Всем доброго дня! Сервер написан на Java + Spring framework + PostgresqlМне нужно выдавать JSON такого вида:

171