Estou fazendo uma aplicação q vai gravar as informações de um form no banco e preciso capturar o ip da pessoa para gravar junto como devo fazer??? javascript??? ou tem algum método do java para isso???
Estou usando JSF.
Valeu até mais a todos.
Estou fazendo uma aplicação q vai gravar as informações de um form no banco e preciso capturar o ip da pessoa para gravar junto como devo fazer??? javascript??? ou tem algum método do java para isso???
Estou usando JSF.
Valeu até mais a todos.
Da uma olhada no JavaDoc da HttpServletRequest.
Tem o método getRemoteAddr(), do HttpServletRequest (mais especificamente do ServletRequest em geral).
Abraços,
Rodrigo
Então criei este método para capiturar o ip mais na hora q vou gravar ele dá nullpointerexception
public String capiturarIp() {
HttpServletRequest request = null;
String ip = request.getRemoteAddr();
return ip;
}
que devo fazer???
Sim, vai dar NullPointerException pois está acessando o método em um objeto nulo. Você precisa acessar um objeto do tipo HttpServletRequest no seu controlador para poder obter essa informação.
Se estiver usando o Struts, obtenha essa informação do object HttpServletRequest do método execute(). Se for o SpringMVC, do seu handleRequestInternal(), onSubmit(), etc (depende muito de qual classe estende).
Assumo aqui, é claro, que o seu sistema é web.
Abraços,
Rodrigo
sim é web mais é faces tem alguma coisa a ver???
Você tem acesso ao objeto da classe FacesContext, né? Então é só fazer assim:
HttpServletRequest request = (HttpServletRequest) context.getServletRequest();
Mas como não conheço muito de JSF, caso tenha dificuldades maiores, a gente pede ajuda aqui no fórum.
Abraços,
Rodrigo
public String capiturarIp() {
FacesContext context = null;
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
String ip = request.getRemoteAddr();
return ip;
}
Do jeito que está fazendo vai dar problema mesmo. Você precisa acessar um objeto FacesContext inicializado pelo JSF com o request e não acessar um request (ou contexto do JSF) declarado no seu próprio método.
Se está fazendo o sistema em JSF, veja as suas classes de action (controladoras) onde o FacesContext deve estar sendo passado inicializado pelo framework.
Se não conseguir resolver, envie o código das parte JSF que precisa do IP para podermos ajudar mais.
Abraços,
Rodrigo
mais tudo isso já esta dentro do jsf eu deveria criar uma classe a parte para fazer isso?
estou postando o meu managedbean
package br.com.greenline.falegreen.managedbean;
import java.util.Date;
import java.util.GregorianCalendar;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import org.apache.myfaces.component.html.ext.HtmlSelectOneMenu;
import br.com.greenline.falegreen.delegate.SugestaoDelegate;
import br.com.greenline.falegreen.model.Departamento;
import br.com.greenline.falegreen.model.Sugestao;
public class SugestaoBean {
private Sugestao sugestaoVO = new Sugestao();
private Date data = new Date();
private HtmlSelectOneMenu departamentoSelecionado;
public String enviarSugestao() {
String action = null;
System.out
.println("Execultando o Metodo enviarSugestao da classe SugestaoBean: ");
if (action == null) {
SugestaoDelegate sugestaoDelegate = new SugestaoDelegate();
Long id = Long.parseLong(departamentoSelecionado.getValue()
.toString());
Departamento departamento = new Departamento();
departamento.setIdentificador(id);
sugestaoVO.setIdentificacao(sugestaoVO.getIdentificacao() + "-"
+ pegarIp());
System.out.println("ip: "+pegarIp());
sugestaoVO.setData(new GregorianCalendar());
sugestaoVO.setDepartamento(departamento);
sugestaoDelegate.salvar(sugestaoVO);
sugestaoVO = new Sugestao();
action = "success";
} else {
action = "failure";
}
System.out.println("action->" + action);
return action;
}
public String pegarIp() {
FacesContext context = null;
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
String ip = request.getRemoteAddr();
return ip;
}
public Sugestao getSugestaoVO() {
return sugestaoVO;
}
public void setSugestaoVO(Sugestao sugestaoVO) {
this.sugestaoVO = sugestaoVO;
}
public HtmlSelectOneMenu getDepartamentoSelecionado() {
return departamentoSelecionado;
}
public void setDepartamentoSelecionado(
HtmlSelectOneMenu departamentoSelecionado) {
this.departamentoSelecionado = departamentoSelecionado;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
}
Rodrigo eu consegui fiz da seguinte manetira
public String pegarIp() {
HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
String ip = request.getRemoteAddr();
return ip;
}
ai ele está me retornando o ip 127.0.0.1 mais quando eu colocalo em produação pegara o ip da pessoa sertinho né?
é q este tomcat esta rodando na minha máquina e acessado por localhost por isso q ele me traz este ip né?
Legal, Robson, parabéns!
Eu não sabia que tinha jeito de pegar assim o contexto do Faces. Senão, teria que passar esse contexto desde a sua classe de actiond o JSF até esse bean. Ou, melhor ainda, pegaria o IP nessa classe do JSF e passaria como parâmetro para esse bean.
De qualquer forma, acho que está resolvido o seu problema. Do jeito que fez vai funcionar direitinho. Se tiver alguma máquina na rede, acesse a sua aplicação pela rede e veja o IP retornado, caso queira testar!
Abraços,
Rodrigo
O cara valeu e obrigadão sem a sua ajuda ñ teria conseguido.
Mais uma vez valeu.
Robson
Rodrigo eu consegui fiz da seguinte manetirapublic String pegarIp() { HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); String ip = request.getRemoteAddr(); return ip; }ai ele está me retornando o ip 127.0.0.1 mais quando eu colocalo em produação pegara o ip da pessoa sertinho né?
é q este tomcat esta rodando na minha máquina e acessado por localhost por isso q ele me traz este ip né?
Rodrigo eu consegui fiz da seguinte manetirapublic String pegarIp() { HttpServletRequest request = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest(); String ip = request.getRemoteAddr(); return ip; }ai ele está me retornando o ip 127.0.0.1 mais quando eu colocalo em produação pegara o ip da pessoa sertinho né?
é q este tomcat esta rodando na minha máquina e acessado por localhost por isso q ele me traz este ip né?
como eu uso isso em um jsp?
grato
No jsp vc tem acesso direto ao request. Basta
<c:out value="${request.remoteAdrr}" />
Ressuscitando… Só para registrar, tive alguns problemas com o “getRemoteAddr”, mas , o “request.getHeader(“x-forwarded-for”)” resolveu meu problema.
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
String ip = request.getRemoteAddr();
simples assim