Capturando IP

16 respostas
R

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.

16 Respostas

C

Da uma olhada no JavaDoc da HttpServletRequest.

R

Tem o método getRemoteAddr(), do HttpServletRequest (mais especificamente do ServletRequest em geral).

Abraços,
Rodrigo

R

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???

R

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

R

sim é web mais é faces tem alguma coisa a ver???

R

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

R
Então Rodrigo fiz assim mais está me dando erro bem na hora de pegar o contexto
public String capiturarIp() {

		FacesContext context = null;
		HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();
		String ip = request.getRemoteAddr();

		return ip;
	}
R

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

R

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;
	}
}
R

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é?

R

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

R

O cara valeu e obrigadão sem a sua ajuda ñ teria conseguido.

Mais uma vez valeu.

Robson

J

robson_vs:
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é?


como eu uso isso em um jsp?
grato

S

JJjava:
robson_vs:
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é?


como eu uso isso em um jsp?
grato

No jsp vc tem acesso direto ao request. Basta

<c:out value="${request.remoteAdrr}" />

L

Ressuscitando… Só para registrar, tive alguns problemas com o “getRemoteAddr”, mas , o “request.getHeader(“x-forwarded-for”)” resolveu meu problema.

R
FacesContext context = FacesContext.getCurrentInstance();
HttpSession session = (HttpSession) context.getExternalContext().getSession(false);
HttpServletRequest request = (HttpServletRequest) context.getExternalContext().getRequest();

String ip = request.getRemoteAddr();

simples assim

Criado 20 de setembro de 2006
Ultima resposta 28 de fev. de 2014
Respostas 16
Participantes 7