Interceptor do spring não deixa eu chamar o css antes de estar logado

5 respostas
andreacerqueira

Estou acompanhando a apostila 21 da caelum e o terminei o crud de tarefas, o único problema é que ao entrar na página principal, se vc não está logado é redirecionado pra pagina de login, e essa página não pega css e imagens, só pega quando o usuário está logado.
O link pra visualizar melhor:
http://www.cuboaoquadrado.com/tarefas
Se clicar no page source da página vai ver o caminho correto do css, resources/css/style.css, ou http://www.cuboaoquadrado.com/tarefas/resources/css/style.css
Mas ao clicar no caminho do css ele redireciona pra http://www.cuboaoquadrado.com/tarefas/resources/css/loginForm se vc não estiver logado, senão ele pega corretamente.
Ou seja o interceptor do spring não deixa eu chamar o css antes de estar logado.
Alguém sabe me dizer como resolver isso?

5 Respostas

darklordkamui

possivelmente vc nao especificou o caminho correto do css na aplicação… se vc ta usando spring security vc deve por o css com a rule de anonimo… assim qualquer pagina ira pegar o css =)

andreacerqueira
o lance é que quando eu logo, o css funciona, ou seja o problema não é o caminho. eu acho que não estou usando security do spring, pelo menos não li sobre isso enquanto fazia. meu spring-context.xml tá assim:
<mvc:resources mapping="/resources/**" location="/resources/" />
	
	<context:component-scan base-package="br.com.caelum.tarefas.controller" />
	<mvc:annotation-driven />	
			
	<mvc:interceptors>
	    <bean class="br.com.caelum.tarefas.interceptor.AutorizadorInterceptor" />
	</mvc:interceptors>
	
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/views/" />
		<property name="suffix" value=".jsp" />
	</bean>
andreacerqueira
Consegui resolver, mas não sei se foi gambiarra, então se alguém puder falar se está correto eu agradeço. Na classe do intercepitor eu falo as URIs que não precisam de autenticação, que são a página do formulario de login e a que efetua o login, então o que eu fiz foi colocar pra ele tb não pegar arquivos terminados com .css. Era assim:
@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object controller) throws Exception {
		String uri = request.getRequestURI();
		if(uri.endsWith("loginForm") || uri.endsWith("efetuaLogin")) {
			return true;
		}
		
		if(request.getSession().getAttribute("usuarioLogado") != null) {
			return true;
		}
		
		response.sendRedirect("loginForm");
		return false;
	
	}
e ficou assim:
@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
			Object controller) throws Exception {
		String uri = request.getRequestURI();
		if(uri.endsWith("loginForm") || uri.endsWith("efetuaLogin") || uri.endsWith(".css")) {
			return true;
		}
		
		if(request.getSession().getAttribute("usuarioLogado") != null) {
			return true;
		}
		
		response.sendRedirect("loginForm");
		return false;
	
	}
A

Estou com o mesmo problema que você, no meu caso além do .CSS tive que adicionar .PNG e .JPG para as imagens que estou usando, você conseguiu outra solução pra isso?

Abraços!

andreacerqueira

continuei coma gambiarra mesmo Ailton…

if(uri.endsWith("loginForm") || uri.endsWith("efetuaLogin") || uri.endsWith(".css") || uri.endsWith(".png") || uri.endsWith(".gif") || uri.endsWith(".jpg")) { return true; }

Criado 16 de junho de 2012
Ultima resposta 17 de jun. de 2013
Respostas 5
Participantes 3