9
respostas

Links redirecionando para WEB-INF e CSS parou de funcionar

Depois que inseri as configurações do SecurityConfiguration tive dois problemas: - Os links na home começaram a redirecionar para WEB-INF, por exemplo, o link da listagem de produtos está indo para o endereço: localhost:8080/casadocodigo/WEB-INF/views/home.jsp/produtos

  • Os css pararam de funcionar, resolvi colocando .antMatchers("/resources/**").permitAll() no método do objeto HttpSecurity, mas não sei se é o mais certo.

O eclipse também está reclamando que o EnableWebMvcSecurity está deprecated.

Gostaria de saber o que devo fazer pros links voltarem ao normal.

O código da classe Secutiry Configuration está abaixo: (OBS: Uso o Java 8 versão 161, Apache 9 e estou usando as dependências fornecidas no exercício "Adicionando o Spring ao nosso projeto")

package br.com.casadocodigo.loja.conf;

import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;

@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/resources/**").permitAll()
        .antMatchers("/produtos/form").hasRole("ADMIN")
        .antMatchers("/carrinho").permitAll()
        .antMatchers("/produtos").hasRole("ADMIN")
        .antMatchers("/produtos/**").permitAll()
        .antMatchers("/").permitAll()
        .anyRequest().authenticated().and().formLogin();
    }
}

E no jsp home, a parte de links está assim:

<header id="layout-header">
        <div class="clearfix container">
            <a href="${s:mvcUrl('HC#index').build()}" id="logo"> </a>
            <div id="header-content">
                <nav id="main-nav">

                    <ul class="clearfix">

                        <li><a href="${s:mvcUrl('PC#listar').build() }"
                            rel="nofollow">Listagem de Produtos</a></li>
                        <li><a href="${s:mvcUrl('PC#form').build() }" rel="nofollow">Cadastro
                                de Produtos</a></li>

                        <li><a href="${s:mvcUrl('CCC#itens').build() }"
                            rel="nofollow">Carrinho</a></li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>

OBS: os produtos na home que deveriam levar ao carrinho também estão levando para WEB-INF

9 respostas

Fala Luan, tudo bem ?

Não entendi porque o redirect ficou mal formado (localhost:8080/casadocodigo/WEB-INF/views/home.jsp/produtos), mas minha suspeita é que, como por exemplo o link da home que imagino ser /produtos está sendo permitido apenas para admin (.antMatchers("/produtos").hasRole("ADMIN")), uma possível requisição não autenticada esteja mandando você para outro recurso. (ou tentando redirecionar para esse endereço estranho).

Em geral quando o redirect é feito nesses casos, o security faz um GET para /login. Existe alguma ação mapeapa para esse endereço ?

De toda forma você pode tentar ajustar sua configuração de segurança.

Exemplo funcionando no meu projeto:

//...

@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserDetailsService userDetailsService;

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/products/form").hasRole("ADMIN")
            .antMatchers("/shopping/**").permitAll()
            .antMatchers(HttpMethod.POST,"/products").hasRole("ADMIN")
            .antMatchers("/products/**").permitAll()
            .anyRequest().authenticated()
        .and()
            .formLogin()
            .loginPage("/login").permitAll() //define a ação (mapeada em algum controller) que vai devolver a página de login
            .defaultSuccessUrl("/products") // define para onde redirecionar após sucesso ao logar usuário
        .and()
            .logout()
            .logoutRequestMatcher(new AntPathRequestMatcher("/logout")).permitAll() // define /logout como uri padrão pra logout
            .logoutSuccessUrl("/login"); //define a URI para onde redirecionar após um logout
    }

    //...

    // Forma recomendada de ignorar no filtro de segurança as requisições para recursos estáticos
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**");
    }
}

Espero ter ajudado. Qualquer coisa poste aqui... Abraço!

Tentei mas não resolveu. Percebi também que na página de carrinho os links também ficam com problema, porém na página de produtos e cadastro os links ficam normais.

Tô tentando continuar o curso, porém isso tá afetando outras partes da aplicação, como por exemplo a parte de comprar e enviar pro carrinho, que está apenas colocando o /carrinho/add/ no link. O código do formulário do carrinho está abaixo:

<section class="buy-options clearfix">
            <form:form servletRelativeAction="/carrinho/add" method="post" cssClass="container">
                <ul id="variants" class="clearfix">
                    <input type="hidden" name="produtoId" value="${produto.id}" />
                    <c:forEach items="${produto.precos }" var="preco">
                        <li class="buy-option"><input type="radio" name="tipo"
                            class="variant-radio" id="tipo" value="${preco.tipo}"
                            checked="checked" /> <label class="variant-label">
                                ${preco.tipo} </label> <small class="compare-at-price">${preco.valor + preco.valor/5}</small>
                            <p class="variant-price">${preco.valor }</p></li>
                    </c:forEach>
                </ul>
                <button type="submit" class="submit-image icon-basket-alt"
                    alt="Compre Agora" title="Compre Agora: ${produto.titulo}"></button>
            </form:form>
        </section>

E a parte de finalizar pagamento também está com problema, está redirecionando para WEB-INF.

Fala Luan, tudo bem ?

Você pode compartilhar o código do projeto, mandando o link do repositorio no github ou afins? Não consegui ver problemas com os códigos. Precisaríamos olhar melhor o funcionamento do projeto.

Abraço!

Beleza, fiz o ultimo commit correspondente a Aula 04 Vídeo 5.

Link do repositório: https://github.com/LuanPeixotop/casadocodigo/

.

Não conseguiu achar a causa do problema? Nenhuma solução ou jeito de contornar isso? Isso está realmente atrapalhando meu progresso no curso

Fala Luan, tudo bem ?

Rodei seu projeto por aqui e funcionou tudo numa boa. Os links estão certinhos na home, no cadastro de produtos, etc.

link_no_rodape Link certinho no rodapé

Depois do clique: link de volta link na pagina de cadastro também está correto e funcionando

Única mudança necessária foi na configuração da base (ja tinha uma base com mesmo, nome). Aí criei os usuários (mesmo usados no curso e testei)

Tive um probleminha só pra subir o projeto localmente. Meu server ignorava a app web java e só subia as apps padrão do tomcat. Percebi que o minha IDE não estava reconhecendo o módulo spring-web dentro do projeto. Então acabei alterando o pom.xml para outro que tenho por aqui compatível com o curso, apaguei todo o conteúdo que estava vindo do repositório do git além de src/e pom.xml (arquivos .project, .classpath, pasta target/, etc). Mandei importar novamente com um maven project e foi. Depois disso já estava funcionando sem problemas como demonstrado acima.

O pom.xml que usei foi esse aqui -> https://gist.github.com/rafael-rollo/b36dec90daa7e99766a3ac8271ffc186

Pra ser sincero não sei o que ocorreu por ai, sendo que por aqui correu tudo bem. Eu sugeriria você fazer as mesmas coisas. Remover seu projeto do server, remover os conteúdos da pasta target e dos arquivos de configuração do eclipse, remontar o projeto na IDE, adicionar novamente ao server.

Espero ter ajudado. Abraço!

Removi o projeto do eclipse, exclui todas as pastas do eclipse e do apache e reinstalei tudo novamente. No projeto, apaguei tudo tirando a pasta SRC, adicionei o pom.xml que você disponibilizou e depois importei no eclipse como maven project, adicionei no servidor e ao iniciar, verifiquei que continua com o mesmo problema.

Como disse anteriormente, na home, na página de detalhes e no carrinho os links redirecionam para WEB-INF:

https://uploaddeimagens.com.br/imagens/link_errado-png

Porém, na página de produtos e no formulário, os links ficam corretos, assim como nos prints que você mandou :/

Fala Luan, tudo bem ?

Não consegui acompanhar o caso, malz. =/ O problema ainda persiste?

Peguei exatamente seu código (no ultimo estado -> Commits on Mar 29, 2018 -> Testes controller), fiz aqueles ajustes que comentei (remoção de pastas antigas, alteração do pom.xml) e testei novamente. Tudo certo com os links, como da última vez. Disponibilizei o estado alterado e funcionando em um repositório no github -> https://github.com/rafael-rollo/casadocodigo-duvida-forum-alura

Outra coisa que pode fazer é usar o estado deste repositório (https://github.com/rafael-rollo/fj27-casadocodigo) a titulo de comparação, testes, etc. Quando ministro curso presencial do Spring na Caelum (é praticamente a mesma ementa e código dos cursos da Alura) utilizo como código base pro treinamento.

Abraço!