Como fazer página aparecer o css sendo que ela precise do filter?

19 respostas
rafa120

Eai pessoas

Eu estava com um problema de filter e consegui resolver aqui com o fórum. Mas agora tenho uma dúvida sobre o CSS da página.

Todas as minhas páginas contém CSS, inclusive a de login. Segue imagem mostrando como está a separação

A página de login está ok aparecendo o css, mas as outras que estão dentro do filter não aparecem… com ctza nao vai aparecer mesmo pq o filter bloqueia

Então vem a dúvida… como faz sendo que preciso que o diretório pages tenha filter, mas apareça o css?

web.xml

<filter>
        <filter-name>AuthFilter</filter-name>
        <filter-class>com.changes.util.AuthFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AuthFilter</filter-name>
        <url-pattern>/pages/*</url-pattern>
    </filter-mapping>

<welcome-file-list>
        <welcome-file>/login.jsf</welcome-file>
    </welcome-file-list>

Valeu

19 Respostas

Hebert_Coelho

Pq dentro do seu filtro você não faz um IF?

Se o destinho final da chamada for um css, você libera mesmo sem login. [=

rafa120

Oi, Hebert

Não entendi… liberar a página sem login?

Meu filter

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest rq = (HttpServletRequest) request;
        HttpServletResponse rp = (HttpServletResponse) response;
        boolean auth = rq.getSession().getAttribute("user") != null;

        if (!auth && !rq.getRequestURL().toString().contains("login.jsf")) {
            rp.sendRedirect(rq.getContextPath() + "/login.jsf");
        } else {

            try {
                chain.doFilter(request, response);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
Hebert_Coelho

Cara, é só fazer um if. Se a URL chamada for seu CSS aí você libera.

Aqui tem um exemplo: Aplicação Web Completa Tomcat JSF Primefaces JPA Hibernate.

rafa120

Hm… poderia me explicar como é a referência do allowedURIs?

JSFCrudApp - nome do projeto
javax.faces.resource - ?
etc

valeu

public void init(FilterConfig fConfig) throws ServletException {
		if(allowedURIs == null){
			allowedURIs = new ArrayList<String>();
			allowedURIs.add(fConfig.getInitParameter("loginActionURI"));
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/main.css.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/theme.css.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/primefaces.js.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/primefaces.css.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/jquery/jquery.js.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/messages/messages.png.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/images/ui-icons_2e83ff_256x240.png.xhtml");
			allowedURIs.add("/JSFCrudApp/javax.faces.resource/images/ui-icons_38667f_256x240.png.xhtml");
		}
	}
Hebert_Coelho

eu fiz chamada para uma página e vi quais urls estavam sendo solicitada a cara request.

Foi só isso. [=

rafa120

Hmm… meus requests sao todos os diretorios dentro de resources mesmo CSS + imagens

ficaria assim?

allowedURIs.add("/MeuProjeto/javax.faces.resource/css/estilos.css.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/css/interior.css.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem1.png.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem2.png.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem3.png.xhtml");

etc … ?

Hebert_Coelho

rafa120:
Hmm… meus requests sao todos os diretorios dentro de resources mesmo CSS + imagens

ficaria assim?

allowedURIs.add("/MeuProjeto/javax.faces.resource/css/estilos.css.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/css/interior.css.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem1.png.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem2.png.xhtml");

allowedURIs.add("/MeuProjeto/javax.faces.resource/img/imagem3.png.xhtml");

etc … ?

Você tentou? Deu algum erro? Funcionou? [=

rafa120

Estou fora de casa, estou trabalhando… por isso nao testei
mas nao tenho mto tempo, entao o quanto eu ja puder adiantar e chegar em casa, melhor :wink:

rafa120

Hm…testei e não deu certo

tentei de várias formas

allowedURIs.add("/ControleChanges/resources/css/interior.css");

allowedURIs.add("/ControleChanges/javax.faces.resource/css/interior.css");

allowedURIs.add("/resources/css/interior.css");

Alguma sugestao?

B

Senhores, que história é essa de passar requisições de CSS pelo filtro de autenticação?

Se o CSS não está sendo carregando, o problema está nas telas ou no web.xml mal configurado que deve estar aplicando o filtro para todas as urls.

Poderia dar um exemplo onde você carrega esse CSS na páginas de login e nas páginas autenticadas?

Hebert_Coelho

Bruno Laturner:
Senhores, que história é essa de passar requisições de CSS pelo filtro de autenticação?

Se o CSS não está sendo carregando, o problema está nas telas ou no web.xml mal configurado que deve estar aplicando o filtro para todas as urls.

Poderia dar um exemplo onde você carrega esse CSS na páginas de login e nas páginas autenticadas?

Já cansei de ter esse problema. Coloque seu CSS dentro da área protegida do site. Seu filtro não barraria o acesso a ele?

B

Sim, barraria.

A questão é, por que estão colocando CSS dentro área protegida do site?

rafa120

A parte que está dentro do filter é a que está declarada no web.xml

<url-pattern>/pages/*</url-pattern>

Ou seja, pelo que sei o que está dentro de pages está dentro do filter, se estiver fora, nao. Certo?

Como pode ver no primeiro post, tenho a pasta resources que tem css e img, que não faço referencia a eles no web.xml

nao sei se posso estar confundindo algo… mas se nao esta funcionando, algo de errado tem rs

B

Qual a url do css que você está chamando no html dessas páginas?

rafa120

Onde carrego o css nas minhas paginas

login.xhtml (lembrando que essa está aparecendo o css normalmente, a index que não carrega o css)

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
 <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	
	<title>STG Changes</title>
	
	<!-- print stylesheet MUST follow imported stylesheets -->
        <link rel="stylesheet" href="resources/css/estilos.css" />
	<link rel="stylesheet" type="text/css" href="resources/css/screen.css"/>
	<link rel="stylesheet" type="text/css" href="resources/css/interior.css"/>
	
    
	<style type="text/css" media="all">
		.callout {padding:0; margin:.5em 1em 1em 0; border:1px solid #ccc; height:1%;}
		.pointer { cursor: pointer }
		#content-sidebar .callout {padding:0; margin:.5em 0 1em 0; border:1px solid #ccc; height:1%;}
		#content .callout h2 {margin-top:0;}
		#content .callout h3 {margin:0; padding:.5em .5em;}
		#content .callout p {padding-left:.5em; padding-right:.5em;}
		#content .callout ul {margin-left:.5em;}
	</style>

</h:head>

index.xhtml

<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:p="http://primefaces.org/ui"
      xmlns:f="http://java.sun.com/jsf/core">
 <h:head>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	
	<title>STG Changes</title>
	
	<!-- print stylesheet MUST follow imported stylesheets -->
        <link rel="stylesheet" href="resources/css/estilos.css" />
	<link rel="stylesheet" type="text/css" href="resources/css/screen.css"/>
	
        <style type="text/css">
            html{
                height: 100%;
            }
            body{
                height: 80%;
            }
        </style>
        
</h:head>
B

No index.xhtml tenta trocar por …/resources ou /resources, vê qual deles funciona.

http://www.nce.ufrj.br/ginape/cursohtml/conteudo/ligacoes/absrel.htm

Hebert_Coelho

Sim, barraria.

A questão é, por que estão colocando CSS dentro área protegida do site?Vai do requisito do cara uai.
Se ele não quer expor um css da vida ou qualquer outra coisa, ele poe na área protegida. O.o

rafa120

Deu certo, Bruno!

foi com …/resources

Valeu mesmo, simples e rápido.

Obrigadao!

rafa120

Valeu também, Hebert

O seu exemplo no blog consegui pegar umas coisas que precisava também.

abração

Criado 18 de fevereiro de 2013
Ultima resposta 19 de fev. de 2013
Respostas 19
Participantes 3