1. java
  2. android
  3. c#
  4. .net
  5. javascript
  6. php
  7. jquery
  8. html
  9. sql

Cadastro com facebook java ee

Olá pessoal, Sou novato e recebi um projeto para terminar. Resumidamente eu tenho um controlador do formulário de cadastro, duas classes para a integração do facebook (Controlador e a que gera a página de login). Eu gostaria de depois que "logasse" com o facebook, ele fosse para a tela de cadastro, e o email já estivesse preenchido (ficando pendente apenas as senhas).

Alguém consegue me dar uma luz? Segue os códigos.

--formulario.jsp--


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>



<html>
<head>

<jsp:include page="../_template/head.jsp"></jsp:include>
<body>

    <form:form action="adicionaUsuario" method="POST" commandName="entidade">
        <form:errors path="*" cssClass="errorblock" element="div" />

        <div class="formSobreposto">
            <div class="formInterno">
                <div id="dvFormulario" class="fields">
                    <div class="tela">
                        <div class="table">
                            <div class="title">
                                <c:if test="${not empty param.mensagem}">
                                    <div class="mensagem">${param.mensagem}</div>
                                </c:if>
                                <h2>Cadastro</h2>
                            </div>

                            <div class="row">
                                <div class="cellForm"><label for="txtUsername">User (email)</label></div>
                                <div class="cellForm"><form:input id="txtUsername" path="username"  /></div>
                                <div class="cellForm"><form:errors path="username" /></div>
                            </div>

                            <div class="row">
                                <div class="cellForm"><label for="txtPassword">Password</label></div>
                                <div class="cellForm"><form:password id="txtPassword" 
                                    path="password"
                                    title="Digite o password de no mínimo 4 caracteres" 
                                    onchange="validarSenha()" 
                                    onkeypress="validarSenha()" 
                                    onpaste="validarSenha()" 
                                    onkeyup="validarSenha()" 
                                    onkeydown="validarSenha()" 
                                    oncut="validarSenha()" /></div>
                                <div class="cellForm"><form:errors path="password" /></div>
                            </div>

                            <div class="row">
                                <div class="cellForm"><label for="txtPassword2" title="Digite o password novamente" >Novamente</label></div>
                                <div class="cellForm"><input type="password" id="txtPassword2" 
                                    onchange="validarSenha()" 
                                    onkeypress="validarSenha()" 
                                    onkeyup="validarSenha()" 
                                    onkeydown="validarSenha()" 
                                    />
                                </div>
                            </div>

                        </div>
                    </div>
                </div>
            </div>
            <div class="botoes">
                <div>
                    <input id="btCancelar" type="button" value="Cancelar" onclick="location.href='loginPage'" />
                    <input id="btRegistrar" type="hidden" value="Registrar" /> 
                    <input type="hidden" name="${_csrf.parameterName}" value="${_csrf.token}" />
                </div>
            </div>
        </div>
    </form:form>

    <jsp:include page="../_template/rodape.jsp"></jsp:include>
</body>
</head>
</html>

--LoginController.java--

package br.com.formento.garagem.controller;

import java.net.MalformedURLException;
import java.util.Date;

import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.com.formento.garagem.dao.interfaces.CarroDao;
import br.com.formento.garagem.dao.interfaces.CarroFotoDao;
import br.com.formento.garagem.dao.interfaces.TipoCategoriaOrcamentoDao;
import br.com.formento.garagem.dao.interfaces.UsuarioDao;
import br.com.formento.garagem.dao.interfaces.UsuarioPermissaoDao;
import br.com.formento.garagem.enums.ResultadoLoginEnum;
import br.com.formento.garagem.model.EmailConfirmacaoUsuario;
import br.com.formento.garagem.model.MD5Converter;
import br.com.formento.garagem.model.ManagerUsuarioSessao;
import br.com.formento.garagem.model.Usuario;
import br.com.formento.garagem.service.MailService;
import br.com.formento.garagem.util.ServletUtils;

@Transactional
@Controller
public class LoginController {

    @Autowired
    private UsuarioDao usuarioDao;

    @Autowired
    private TipoCategoriaOrcamentoDao tipoCategoriaOrcamentoDao;

    @Autowired
    private UsuarioPermissaoDao usuarioPermissaoDao;

    @Autowired
    private CarroDao carroDao;

    @Autowired
    private CarroFotoDao carroFotoDao;

    @Autowired
    private MailService mailService;

    @RequestMapping({ "/", "index" })
    public String index(HttpServletRequest httpServletRequest) {
        ManagerUsuarioSessao managerUsuarioSessao = new ManagerUsuarioSessao(httpServletRequest);
        if (managerUsuarioSessao.getUsuarioSessao().getUsuario().getCarroSelecionado())
            return "redirect:cadastraCarro?codigo=" + managerUsuarioSessao.getUsuarioSessao().getUsuario().getCarro().getCodigo();
        else
            return "redirect:nenhumCarro";
    }

    @RequestMapping(value = "/loginPage", method = RequestMethod.GET)
    public String login(ModelMap modelMap) {
        Usuario entidade = new Usuario();
        modelMap.addAttribute("entidade", entidade);
        return "login/page";
    }

    @RequestMapping(value = "/loginExec", method = RequestMethod.POST)
    public String loginExec(HttpServletRequest httpServletRequest, @Valid Usuario entidade, BindingResult result, final ModelMap modelMap) {
        if (result.hasErrors())
            return ResultadoLoginEnum.INVALIDO.getPagina();

        ManagerUsuarioSessao managerUsuarioSessao = new ManagerUsuarioSessao(httpServletRequest);

        Usuario usuarioByDao = usuarioDao.getByUsername(entidade.getUsername());

        ResultadoLoginEnum resultadoLoginEnum = managerUsuarioSessao.getUsuarioSessao().login(entidade, usuarioByDao);
        if (resultadoLoginEnum.equals(ResultadoLoginEnum.SUCESSO)) {
            managerUsuarioSessao.getUsuarioSessao().configurarUsuario(modelMap, carroDao, carroFotoDao, tipoCategoriaOrcamentoDao,
                    usuarioPermissaoDao);

            usuarioByDao.setDataUltimoLogin(new Date());
            usuarioDao.altera(usuarioByDao);

        }
        return resultadoLoginEnum.getPagina();
    }

    @RequestMapping(value = "/logout", method = RequestMethod.POST)
    public String logout(HttpServletRequest httpServletRequest) {
        ManagerUsuarioSessao managerUsuarioSessao = new ManagerUsuarioSessao(httpServletRequest);
        managerUsuarioSessao.getUsuarioSessao().logout();

        return "redirect:loginPage";
    }

    @RequestMapping("cadastraUsuario")
    public String form(final ModelMap modelMap) {
        Usuario entidade = new Usuario();

        modelMap.addAttribute("entidade", entidade);
        return "login/formulario";
    }

    @RequestMapping(value = "/adicionaUsuario", method = RequestMethod.POST)
    public String merge(Model model, @ModelAttribute @Valid Usuario entidade, BindingResult result, HttpServletRequest httpServletRequest) {
        model.addAttribute("entidade", entidade);
        if (result.hasErrors()) {
            model.addAttribute("mensagem", result.getFieldError().getDefaultMessage());

            return "redirect:cadastraUsuario";
        }

        if (entidade.getPassword().length() > 20) {
            model.addAttribute("mensagem", "O tamanho da senha deve ser de 4 a 20 caracteres");
            return "redirect:cadastraUsuario";
        }

        Usuario byUsername = usuarioDao.getByUsername(entidade.getUsername());
        if (byUsername == null) {
            entidade.setDataCadastro(new Date());
            entidade.setPassword(MD5Converter.getMD5(entidade.getPassword()));
            usuarioDao.adiciona(entidade);

            ServletUtils servletUtils = new ServletUtils(httpServletRequest);

            EmailConfirmacaoUsuario emailConfirmacaoUsuario;
            try {
                emailConfirmacaoUsuario = new EmailConfirmacaoUsuario(entidade, mailService, servletUtils.getUrlBase());

                emailConfirmacaoUsuario.enviar();

                model.addAttribute("mensagem", "Login criado. Verifique seu email");
            } catch (MalformedURLException e) {
                e.printStackTrace();

                model.addAttribute("mensagem", "Ocorreu um erro. Tentar novamente mais tarde");
            }
            return "redirect:loginPage";
        } else {
            model.addAttribute("mensagem", "Email existente. Utilize outro");
            return "redirect:cadastraUsuario";
        }
    }

    @RequestMapping(value = "/confirmacaoRegistro")
    public String confirmacaoRegistro(ModelMap modelMap, int codigo, String username, String password) {
        Usuario usuario = usuarioDao.buscaPorId(codigo);

        if (usuario == null) {
            modelMap.addAttribute("mensagem", "Parametro (codigo) incorreto");
            return "redirect:loginPage";
        }

        if (usuario.getUsername().compareTo(username) != 0) {
            modelMap.addAttribute("mensagem", "Parametro (username) incorreto");
            return "redirect:loginPage";
        }

        if (usuario.getPassword().compareTo(password) != 0) {
            modelMap.addAttribute("mensagem", "Parametro (password) incorreto");
            return "redirect:loginPage";
        }

        usuario.setDataAtivacao(new Date());
        usuarioDao.altera(usuario);

        modelMap.addAttribute("mensagem", "Seu registro foi liberado para acesso");
        return "redirect:loginPage";
    }

}
--FBConnection.java--

package br.com.formento.garagem.socialmedia;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

public class FBConnection {

    public static final String FB_APP_ID = "400849876763524";
    public static final String FB_APP_SECRET = "";
    public static final String REDIRECT_URI = "http://localhost:8080/garagem/cadastraUsuario";

    static String accessToken = "CAACEdEose0cBADQk7mf5QJxYTuvZCSXmYb6cwSr3IyNr2I0me5lUWrf3IZAN64GKaaoEZAQzGIdtc87gO2BhvKrDNLSmiOuAzAw8H1eWlTiz3jw7m6vo5pC9KShdW9zDZCPplEQxcZByGwEVSvzDeS8orw9oioUGsmU02oUTnQg1JYs0QyELrc0ZA3hgu96RJeK4hpkBS8Mj6YKMFVUsuo";


    public String getFBAuthUrl() {
        String fbLoginUrl = "";
        try {
            fbLoginUrl = "http://www.facebook.com/dialog/oauth?" + "client_id="
                    + FBConnection.FB_APP_ID + "&redirect_uri="
                    + URLEncoder.encode(FBConnection.REDIRECT_URI, "UTF-8")
                    + "&scope=email";
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return fbLoginUrl;
    }

    public String getFBGraphUrl(String code) {
        String fbGraphUrl = "";
        try {
            fbGraphUrl = "https://graph.facebook.com/oauth/access_token?"
                    + "client_id=" + FBConnection.FB_APP_ID + "&redirect_uri="
                    + URLEncoder.encode(FBConnection.REDIRECT_URI, "UTF-8")
                    + "&client_secret=" + FB_APP_SECRET + "&code=" + code;
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        }
        return fbGraphUrl ;
    }

    public String getAccessToken(String code) {
        if ("".equals(accessToken)) {
            URL fbGraphURL;
            try {
                fbGraphURL = new URL(getFBGraphUrl(code));
            } catch (MalformedURLException e) {
                e.printStackTrace();
                throw new RuntimeException("Invalid code received " + e);
            }
            URLConnection fbConnection;
            StringBuffer b = null;
            try {
                fbConnection = fbGraphURL.openConnection();
                BufferedReader in;
                in = new BufferedReader(new InputStreamReader(
                        fbConnection.getInputStream()));
                String inputLine;
                b = new StringBuffer();
                while ((inputLine = in.readLine()) != null)
                    b.append(inputLine + "\n");
                in.close();
            } catch (IOException e) {
                e.printStackTrace();
                throw new RuntimeException("Unable to connect with Facebook "
                        + e);
            }

            accessToken = b.toString();
            if (accessToken.startsWith("{")) {
                throw new RuntimeException("ERROR: Access Token Invalid: "
                        + accessToken);
            }
        }
        return accessToken;
    }
}
--FBGraph.java--


package br.com.formento.garagem.socialmedia;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.HashMap;
import java.util.Map;

import org.json.JSONException;
import org.json.JSONObject;

public class FBGraph {
    private String accessToken;



    public FBGraph(String accessToken) {
        this.accessToken = accessToken;
    }

    public String getFBGraph() {
        String graph = null;
        try {

            String g = "https://graph.facebook.com/me?" + accessToken;
            URL u = new URL(g);
            URLConnection c = u.openConnection();
            BufferedReader in = new BufferedReader(new InputStreamReader(
                    c.getInputStream()));
            String inputLine;
            StringBuffer b = new StringBuffer();
            while ((inputLine = in.readLine()) != null)
                b.append(inputLine + "\n");
            in.close();
            graph = b.toString();
            System.out.println(graph);
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("ERROR in getting FB graph data. " + e);
        }
        return graph;
    }

    public Map<String, String> getGraphData(String fbGraph) {
        Map<String, String> fbProfile = new HashMap<String, String>();
        try {
            JSONObject json = new JSONObject(fbGraph);
            fbProfile.put("id", json.getString("id"));

            fbProfile.put("first_name", json.getString("first_name"));
            if (json.has("email"))
                fbProfile.put("email", json.getString("email"));

            if (json.has("gender"))
                fbProfile.put("gender", json.getString("gender"));
        } catch (JSONException e) {
            e.printStackTrace();
            throw new RuntimeException("ERROR in parsing FB graph data. " + e);
        }
        return fbProfile ;
    }
}

Desde já agradeço a ajuda.

  1. Você vai ver essas setas em qualquer página de pergunta. Com elas, você pode dizer se uma pergunta ou uma resposta foram relevantes ou não.
  2. Edite sua pergunta ou resposta caso queira alterar ou adicionar detalhes.
  3. Caso haja alguma dúvida sobre a pergunta, adicione um comentário. O espaço de respostas deve ser utilizado apenas para responder a pergunta.
  4. Se o autor da pergunta marcar uma resposta como solucionada, esta marca aparecerá.
  5. Clique aqui para mais detalhes sobre o funcionamento do GUJ!

0 resposta

Não é a resposta que estava procurando? Procure outras perguntas com as tags oauth jsp spring ou faça a sua própria pergunta.