Para Desenvolvedores

Projeto AngulaJS

Bom dia

Segui o tutorial abaixo, e funcionou a execução com um projeto AngularJs, porém não é possível acessar algumas urls (rotas), acredito seja preciso aplicar alguma regra de reescrita de url direto no Apache.

É realmente isso? como é feito essa alteração np Apache? consigo utilizar um .htaccess?

https://lumisxp.lumis.com.br/para-desenvolvedores/forum/como-migrar-projeto-pagina-web-desenvolvida-em-vue-js-para-o-lumis-portal.htm

Obrigado

Por Lucas Domigues

Em 07/10/20 09:43

Acompanhar pergunta

7 resposta(s):

Ordenar por:

Lucas,

Quais URLs que não são possíveis acessar?

Para saber se é culpa do apache, é possível tentar acessar essa rota diretamente no servidor de aplicações. Por exemplo, imagine a URL: http://localhost/rota

Esta URL está na porta 80, normalmente escutada no Apache. E normalmente o Apache redireciona a requisição pra o Tomcat. Assim, é possível acessar a mesma URL diretamente no Tomcat, normalmente na porta 8080: http://localhost:8080/rota

Se funcionar na porta 8080, então realmente deve ser culpa do Apache. Caso contrário, pode ser culpa do Tomcat.

 

Acho que vale a pena checar se são as regras de cross site do lumis que estão impedindo esse funcionamento:

https://lumisxp.lumis.com.br/doc/lumisportal/12.2.0/pt-BR/lumis.service.portalmanagement.security.csr.administration.html

Por Luiz Carlos Valenca

Em 08/10/20 12:35

Boa tarde

Minha aplicação funciona nessa estrutura:

dominio/raiz_aplicacao/index.html

Mas quando eu tento acessar uma url que já é a url de rota, ex.:

dominio/raiz_aplicacao/login/cpf

Ocorre um erro de página não encontrada:

Por Lucas Domigues

Em 08/10/20 13:44

Thiago

O conteúdo do arquivo.html é sempre o mesmo, mas o html no navegador muda dinâmicamente de acordo com a "página" que usuário estiver.

É um projeto single page aplication.

Usa login, mas é feito por APIs externas.

Por Lucas Domigues

Em 08/10/20 15:47

Lucas, então eu suponho que o melhor é criar um Servlet Filter para a aplicação que tem um url-pattern adequado para as rotas que você tem (veja exemplo abaixo) e esse filtro faz um forward para o /index.html.

PS: teria que testar se essa solução atende.

PS: teria que tomar cuidado para esse filtro não esconder acessos a eventuais APIs que estejam sob caminho comum (por exemplo, se tiver uma rota /rota e existir uma API /rota/api/meu-rest, tem que tomar cuidado do filtro deixar passar os requests para a API).

Atenciosamente.

Por Thiago Berne

Em 08/10/20 16:13

Thiago

A solução deve atender. 

No apache em outros servidores, eu sempre faço via .htacess, mas no Lumis não sei como proceder.

As APIS são de outro domínio.

Qual é o exemplo? 

Por Lucas Domigues

Em 08/10/20 16:23
Editado em 08/10/20 16:24

Lucas, fiz um exemplo rápido aqui pra você poder adaptar.

Seguinte...

Tenho meu SPA (usei esse daqui como exemplo) dentro de uma pasta chamada static-app que eu coloquei dentro da pasta www do meu LumisXP.

Depois disso, eu criei o seguinte Servlet Filter para fazer a rota:

package br.com.teste;

import static org.apache.commons.lang3.StringUtils.isBlank;
import static org.apache.commons.lang3.StringUtils.substringAfterLast;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class SPAFilter implements Filter
{
	@Override
	public void init(FilterConfig filterConfig) throws ServletException
	{
	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException
	{
		HttpServletRequest req = (HttpServletRequest) request;
		String requestURI = req.getRequestURI();
		String fileExtension = substringAfterLast(requestURI, ".").toLowerCase();
		
		if(isBlank(fileExtension))
		{
			request.getRequestDispatcher("/static-app/index.html").forward(request, response);
		}
		else
		{
			request.getRequestDispatcher("/static-app/" + requestURI).forward(request, response);
		}
	}

	@Override
	public void destroy()
	{
	}
}

Depois, incluí o mapeamento do filtro no meu web.xml, assim:

<filter>
	<filter-name>SPA Filter</filter-name>
	<filter-class>br.com.teste.SPAFilter</filter-class>
	<async-supported>true</async-supported>
</filter>

<filter-mapping>
	<filter-name>SPA Filter</filter-name>
	<url-pattern>/*</url-pattern>
	<dispatcher>REQUEST</dispatcher>
</filter-mapping>

Dessa forma, consegui acessar minha aplicação SPA em http://localhost:8080/ e navegar pelas rotas normalmente.

Esse código é somente um exemplo e deve ser adaptado para o seu caso (tanto o Java quanto o mapeamento no web.xml). Repare que, dessa forma, nada mais no meu LumisXP é acessível. Somente o SPA. Quando você for adaptar isso, tenha em mente que esse exemplo as-is não deve ser usado.

 

Atenciosamente.

Por Thiago Berne

Em 08/10/20 17:08

Tive mesmo problema em outros projetos aqui, encontramos 3 soluções:

 

Camado do SPA

- Utilizar notação de hash para tratar as rotas no SPA (a url fica index/#/rota1). Assim a url antes do hash é fixa para a página so SPA e depois do hash é rota do SPA.

 

Camada Lumis

- Criar páginas e canais lumis para cada rota SPA, apontando todas para o mesmo layoutfile. Mas deve incluir a tag <base href=""> no head pra suportar corretamente.

 

Camada do Webserver

- Criar um rewrite webserver pra tudo que for /caminho-para-seu-spa/* apontar para /caminho-para-seu-spa/index.html ( que é a mesma solução do Thiago Berne, mas na camada do webserver). A implementação disso varia com o webserver utilizado na frente do lumis.

Por Gabriel Barbosa

Em 09/10/20 10:19

Entrar

Interaja com a comunidade e tenha acesso a conteúdos exclusivos.

Houve algum erro ao acessar o banco de dados. Tente novamente mais tarde.