Session JSF

12 respostas
dahenz

Bom dia!

Estou utilizando JSF em uma aplicação, estou utilizando o escopo como SESSION em meu arquivo faces-config.xml, mas quando navego entre as páginas, o browser continua mostrando o endereço com os nomes das páginas, o que não acho seguro.

Pergunta: Tem alguma forma de não mostrar isso em JSF???

Agredeço

12 Respostas

G

Configure sempre sua navegação pelo Faces-Config.
E não utilize a tag nos navigation-rule

Assim o endereço das páginas não serão exibidas na URL.

dahenz

A navegação em meu faces-config.xml está desta forma:

<?xml version="1.0"?>
<!DOCTYPE faces-config PUBLIC
  "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
  "http://java.sun.com/dtd/web-facesconfig_1_1.dtd">

<faces-config>
	<managed-bean>
		<managed-bean-name>LoginMB</managed-bean-name>
		<managed-bean-class>br.com.vieweb.ManagedBean.LoginMB</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	
	<navigation-rule>
		<from-view-id>/login.jsp</from-view-id>
		<navigation-case>
			<from-action>#{LoginMB.autenticarUsuario}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/home.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-action>#{LoginMB.autenticarUsuario}</from-action>
			<from-outcome>fail</from-outcome>
			<to-view-id>/login.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>

	<managed-bean>
		<managed-bean-name>EventoMB</managed-bean-name>
		<managed-bean-class>br.com.vieweb.ManagedBean.EventoMB</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
		
	<navigation-rule>
		<from-view-id>/home.jsp</from-view-id>
		<navigation-case>
			<from-action>#{EventoMB.autenticarUsuario}</from-action>
			<from-outcome>success</from-outcome>			
			<to-view-id>/eventos.jsp</to-view-id>
		</navigation-case>
		<navigation-case>
			<from-action>#{EventoMB.autenticarUsuario}</from-action>
			<from-outcome>fail</from-outcome>			
			<to-view-id>/login.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
			
	<navigation-rule>
		<from-view-id>/eventos.jsp</from-view-id>
		<navigation-case>
			<from-action>#{EventoMB.sair}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/home.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	<managed-bean>
		<managed-bean-name>MetaVigenciaMB</managed-bean-name>
		<managed-bean-class>br.com.vieweb.ManagedBean.MetaVigenciaMB</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
		
	<navigation-rule>
		<from-view-id>/home.jsp</from-view-id>
		<navigation-case>
			<from-action>#{MetaVigenciaMB.autenticarUsuario}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/metavigencia.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
		
	<navigation-rule>
		<from-view-id>/metavigencia.jsp</from-view-id>
		<navigation-case>
			<from-action>#{MetaVigenciaMB.sair}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/home.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>
	
	<managed-bean>
		<managed-bean-name>FltMetasVigenciaMB</managed-bean-name>
		<managed-bean-class>br.com.vieweb.ManagedBean.FltMetasVigenciaMB</managed-bean-class>
		<managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
		
	<navigation-rule>
		<from-view-id>/home.jsp</from-view-id>
		<navigation-case>
		    <from-action>#{FltMetasVigenciaMB.autenticarUsuario}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/fltRelMetasVigencia.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>		

	<navigation-rule>
		<from-view-id>/fltRelMetasVigencia.jsp</from-view-id>
		<navigation-case>
		    <from-action>#{FltMetasVigenciaMB.sair}</from-action>
			<from-outcome>success</from-outcome>
			<to-view-id>/home.jsp</to-view-id>
		</navigation-case>
	</navigation-rule>		
	
	<managed-bean>
	   <managed-bean-name>SobreMB</managed-bean-name>
	   <managed-bean-class>br.com.vieweb.ManagedBean.SobreMB</managed-bean-class>
	   <managed-bean-scope>session</managed-bean-scope>
	</managed-bean>
	
	<navigation-rule>
	   <from-view-id>/home.jsp</from-view-id>
	   <navigation-case>
	      <from-action>#{SobreMB.autenticarUsuario}</from-action>
	      <from-outcome>success</from-outcome>
	      <to-view-id>/sobreosistema.jsp</to-view-id>
	   </navigation-case>
	</navigation-rule>

	<navigation-rule>
	   <from-view-id>/sobreosistema.jsp</from-view-id>
	   <navigation-case>
	      <from-action>#{SobreMB.sair}</from-action>
	      <from-outcome>success</from-outcome>
	      <to-view-id>/home.jsp</to-view-id>
	   </navigation-case>
	</navigation-rule>
	
	<converter>
	   <converter-id>ReaisConverter</converter-id>
	   <converter-class>br.com.vieweb.converter.ReaisConverter</converter-class>
	</converter>
				
</faces-config>

É a forma correta?

Obrigado

G

Sim, quando vc chama um evento, a página vai mudar mais o endereço da URL vai continuar o da página
que chamou o evento. Certo?

Outra coisa interessante de se fazer, já que está preocupado com a segurança e o nome da URL é
restringir o acesso aos seus xHTML ( caso esteja usando facelets, imagino que sim ) no web.xml com:

<security-constraint> <display-name>Restrict raw XHTML Documents</display-name> <web-resource-collection> <web-resource-name>XHTML</web-resource-name> <url-pattern>*.xhtml</url-pattern> </web-resource-collection> <auth-constraint/> </security-constraint>

Assim caso digitem o nome da página .xhtml, vão receber um 403 do container

dahenz

Bah cara… pior que quando eu chamo um evento do formulário, a url muda para o nome do arquivo que estou chamando. Isso que eu queria evitar…

Por exemplo, quando valida meu usuário de login, é chamado o meu arquivo home.jsp minha url fica http://localhost/vieweb/login.jsf, quando entro no cadastro de eventos, a url muda para http://localhost/vieweb/home.jsf, quando saio, http://localhost/vieweb/eventos.jsf.

É alguma configuração no web.xml talvez???

Obrigado pela força!

L

dahenz:
Bom dia!

Estou utilizando JSF em uma aplicação, estou utilizando o escopo como SESSION em meu arquivo faces-config.xml, mas quando navego entre as páginas, o browser continua mostrando o endereço com os nomes das páginas, o que não acho seguro.

Pergunta: Tem alguma forma de não mostrar isso em JSF???

Agredeço

Não! Esse negócio de mostrar “o endereço com o nome das páginas” é a maneira como a web funciona. Não há como “desabilitar” isso. As soluções possíveis são gambiarrentas e problemáticas. Exemplo: após cada requisição, guardar a página em um buffer de memória (talvez um “CharArrayReader” / “CharArrayWriter”) e redireciaonar para a página raiz. A URL da página raiz é interceptada por um filtro, que verifica se existe um buffer em memória. Havendo, será mostrado o buffer, não havendo será exibido uma página normal.

Mas sinceramente, acho a solução acima tão arriscada (pode haver alguns “corner cases”) que não acho que valha a pena.

Seu problema, como digo pra um monte de gente aqui, é o uso excessivo de Session. É ela que faz com que o botão voltar, a navegação “fora de ordem”, a caixa de texto grande, a url no browser “parem de funcionar”.

O mais incrível é que as pessoas preferem por a culpa em elementos que sempre existiram no browser ao invés do próprio hábito, quase automático, de usar session para tudo.

dahenz

Eu trabalhei um tempo com struts2, nesse framework era criada uma sessão, e na url apenas era mostrado o id dessa sessão, gostaria de fazer algo parecido em JSF, não domino muito ainda essa parte do JSF, mas isso que tu escreveste foi de muita valia, já estou reavaliando meu faces-config.xml e alterando os escopos de session apenas para as páginas que eu realmente precisarei de sessão.

Como eu faria mostrar na url o id de sessão, tem aguma forma de fazer isso em JSF???

Obrigado

dahenz

Pessoal!!! Não tem como eu mostrar na url do browser o id da sessão JSF ao invés de o caminho com o nome dos arquivos???

Ajuda…

L

dahenz:
Pessoal!!! Não tem como eu mostrar na url do browser o id da sessão JSF ao invés de o caminho com o nome dos arquivos???

Ajuda…

Isso não é configurável. Na verdade, id na url é um meio alternativo quando não se pode utilizar o cookie.

L

Leonardo3001:
dahenz:
Pessoal!!! Não tem como eu mostrar na url do browser o id da sessão JSF ao invés de o caminho com o nome dos arquivos???

Ajuda…

Isso não é configurável. Na verdade, id na url é um meio alternativo quando não se pode utilizar o cookie.

O que pode ser usado em id na url é o escopo de conversation, disponível através do Seam, ou de outros plugins.

dahenz

Não estou utilizando Seam, mas preciso estudá-lo. Muita gente fala bem desse framework.

Você teria um exemplo???

Obrigado!!

G

www.google.com
:thumbup:

dahenz

Voltando a pergunta Leonardo… Você tem um exemplo sobre a dúvida anterior? Essa configuração é feita no faces-config.xml?

Obrigado pela ajuda!

Criado 26 de janeiro de 2009
Ultima resposta 27 de jan. de 2009
Respostas 12
Participantes 4