Bom dia pessoal.
Minha dúvida é a seguinte: estou fazendo um sistema de login em java, que busca um usuario e senha no banco de dados e os direciona para determinadas páginas, dependendo do seu nível de acesso. Até aqui tudo bem.
Estou tendo problemas na questão de segurança do acesso das jsp’s. Qualquer pessoa pode digitar a URL das páginas jsp’s (inclusive paginas administrativas) e acessa-las. Pesquisei muito na internet sobre isso, e vi várias formas de fazer, inclusive usando filtros, usando o PhaseListener, usando o Realm. Mas, a forma mais simples que eu vi (pra mim), foi colocando as jsp’s dentro da pasta WEB-INF. Eu fiz isso e realmente funcionou. O problema, é que tem q mudar os caminhos dentro da jsp para acessar o banco e as outras jsp’s. Quando eu faço isso, a minha jsp mainpage fica em branco no navegador. Olha como estao os meus jsp’s e os xml’s.
olajsf.jsp=======================
[code]<%@page contentType=“text/html”%>
<%@page pageEncoding=“UTF-8”%>
<%@taglib prefix=“f” uri=“http://java.sun.com/jsf/core”%>
<%@taglib prefix=“h” uri=“http://java.sun.com/jsf/html”%>
<h:form id="login_form">
<h:panelGrid columns="2" id="login_panel">
<f:facet name="header">
<h:outputText value="Login" />
</f:facet>
<f:facet name="footer">
<h:commandButton value="Logar" action="#{LoginHandler.login}"/>
</f:facet>
<!--campo usuario-->
<h:outputLabel for="usuario">
<h:outputText value="Usuario"/>
</h:outputLabel>
<h:inputText value="#{LoginHandler.LO.usuario}" id="usuario" />
<!--campo senha-->
<h:outputLabel for="password">
<h:outputText value="password"/>
</h:outputLabel>
<h:inputSecret value="#{LoginHandler.LO.password}" id="password" />
</h:panelGrid>
</h:form>
</body>
</f:view>
[/code]
mainpage.jsp===========
[code]<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>
<rich:tabPanel>
<rich:tab label="Fornecedores">
<h:form id="Cadastro">
<h:outputText value="#{msgs['fornecedor-nome']}" />
<br />
<h:inputText id="nome" required="true"
value="#{fornecedorHandler.fornecedor.nome}"
validator="#{fornecedorHandler.validaCase}">
<f:validateLength minimum="5" />
</h:inputText>
<h:message for="nome" style="color: darkred" />
<br />
<h:outputText value="#{msgs['fornecedor-descricao']}" />
<br />
<h:inputTextarea id="descricao"
value="#{fornecedorHandler.fornecedor.descricao}" />
<h:message for="descricao" style="color: darkred" />
<br />
<h:commandButton value="Salvar" action="#{fornecedorHandler.salva}" />
</h:form>
<rich:spacer height="10"/>
<rich:separator height="1" lineType="dotted"/>
<rich:spacer height="10"/>
<jsp:include page="lista.jsp" />
</rich:tab>
<rich:tab label="Contas a Pagar">
<jsp:include page="contas.jsp"/>
</rich:tab>
</rich:tabPanel>
</f:view>
[/code]contas.jsp ===================
[code]<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>
<f:subview id="contas">
<h:form>
<h:panelGrid>
<h:outputText value="Fornecedor"/>
<h:selectOneMenu binding="#{contaPagarHandler.fornecedorSelecionado}">
<f:selectItem itemValue="0" itemLabel="Selecione Fornecedor"/>
<f:selectItems value="#{contaPagarHandler.fornecedoresParaComboBox}" />
</h:selectOneMenu>
<h:outputText value="Descrição"/>
<h:inputText value="#{contaPagarHandler.contaPagar.descricao}"/>
<h:outputText value="Data de pagamento"/>
<rich:calendar value="#{contaPagarHandler.contaPagar.data.time}"/>
<h:outputText value="Valor"/>
<h:inputText value="#{contaPagarHandler.contaPagar.valor}"/>
<h:selectBooleanCheckbox value="#{contaPagarHandler.contaPagar.pago}">
<h:outputText value="Pago? "/></h:selectBooleanCheckbox>
<h:messages/>
<h:commandButton actionListener="#{contaPagarHandler.salva}" value="gravar"/>
<rich:dataList value="#{contaPagarHandler.contas}" var="conta">
<h:outputText value="#{conta.descricao}"/>
<h:outputText value=" - "/>
<h:outputText value="#{conta.fornecedor.nome}"/>
</rich:dataList>
</h:panelGrid>
</h:form>
</f:subview>
[/code]
lista.jsp=====================
[code]<%@ taglib uri=“http://java.sun.com/jsf/core” prefix=“f”%>
<%@ taglib uri=“http://java.sun.com/jsf/html” prefix=“h”%>
<%@ taglib uri=“http://richfaces.org/a4j” prefix=“a4j” %>
<%@ taglib uri=“http://richfaces.org/rich” prefix=“rich” %>
<h:column>
<f:facet name="header">
<h:outputText value="Alterar"/>
</f:facet>
<h:commandLink actionListener="#{fornecedorHandler.escolheFornecedor}">
<h:outputText value="(alterar)"/>
<f:param id="editId" name="id" value="#{f.id}"/>
</h:commandLink>
</h:column>
<%--Rodape com o paginador--%>
<f:facet name="footer">
<rich:datascroller/>
</f:facet>
</rich:dataTable>
</h:form>
</f:subview>
[/code]web.xml=======================
[code]<?xml version="1.0" encoding="UTF-8"?>
projetojsf
index.html index.htm index.jsp default.html default.htm default.jsp olajsf.jsp org.richfaces.SKIN blueSky javax.faces.STATE_SAVING_METHOD server Ajax4jsf Filter ajax4jsf org.ajax4jsf.Filter ajax4jsf Faces Servlet REQUEST FORWARD INCLUDE<filter>
<filter-name>HibernateSessionFilter</filter-name>
<filter-class>br.com.caelum.fj26.util.HibernateSessionFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HibernateSessionFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Faces Servlet
javax.faces.webapp.FacesServlet
1
Faces Servlet
/faces/*
*.jsf
[/code]
faces-config.xml===================
[code]<?xml version="1.0" encoding="UTF-8"?>
messages
pt
en
<managed-bean>
<managed-bean-name>LoginHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.LoginHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>fornecedorHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.FornecedorHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>contaPagarHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.ContaPagarHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<managed-bean>
<managed-bean-name>usuarioHandler</managed-bean-name>
<managed-bean-class>br.com.caelum.fj26.UsuarioHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/olajsf.jsp</from-view-id>
<navigation-case>
<from-outcome>ok</from-outcome>
<to-view-id>/WEB-INF/jsp/mainpage.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/olajsf.jsp</from-view-id>
<navigation-case>
<from-outcome>admin</from-outcome>
<to-view-id>/admin.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/olajsf.jsp</from-view-id>
<navigation-case>
<from-outcome>erro</from-outcome>
<to-view-id>/olajsf.jsp</to-view-id>
</navigation-case>
</navigation-rule>
<!-- <navigation-rule>
<from-view-id>/*</from-view-id>
<navigation-case>
<from-outcome>loginPage</from-outcome>
<to-view-id>/olajsf.jsp</to-view-id>
</navigation-case>
</navigation-rule>
br.com.caelum.fj26.util.AuthorizationListener
-->
[/code]
A pagina de login (olajsf.jsf) diretamente dentro da WebContent, já as paginas mainpage, contas e lista estão dentro de WebContent/WEB-INF/jsp.
A mainpage.jsp chama através de um rich:tab as paginas contas e lista. Se eu nao modificar os endereços, ela abre normal, mas quando eu salvo um cadastro ou clico na aba de contas, ela dá um erro que nao encontra a pagina. Se eu modificar na linha por exemplo:
[code]<jsp:include page=“contas.jsp”/>
<jsp:include page=“WebContent/WEB-INF/jsp/contas.jsp”/>[/code]
ele abre a página, só que toda em branco.
E ae pessoal, alguem tem alguma dica do que eu posso estar fazendo errado?? Sou iniciante no java, e pelo que eu vi, esse é o método mais simples pra implementar essa segurança.
Desde já agradeço a todos.