9
respostas

Links não pegam mais.

Olá, estou tendo alguns problemas após começar as aulas de spring security. Após fazer a terceira atividade da aula 4, todos os links das páginas form e lista do projeto estão apresentando erro 404 e caminhos incorretos, mas não fiz nada diferente das aulas.

Por exemplo, se eu estiver na página form e clicar no link para ir ao lista de produtos, é apresentado o erro 404 e o seguinte caminho - http://localhost:8080/casadocodigo/WEB-INF/views/produtos/form.jsp/produtos

Todos os links dessas páginas que sitei estão tendo esse tipo de problema e inclusive não consigo mais cadastrar nada na view form pelo mesmo motivo. Já conferi tudo e não encontrei nenhum possível motivo para isso. Segue minha view form:

form

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="s"%>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Livros de Java, Android, iPhone, Ruby, PHP e muito mais - Casa do Código</title>

<c:url value="/resources/css" var="cssPath" />
<link rel="stylesheet" href="${cssPath }/bootstrap.min.css">
<link rel="stylesheet" href="${cssPath }/bootstrap-theme.min.css">

<style type="text/css">
    body{
        padding-bottom: 60px;
    }

</style>


</head>
<body>

    <nav class="navbar navbar-inverse">
        <div class="container">
            <div class="navbar-header">
                <button type="button" class="navbar-toggle collapsed"
                    data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"
                    aria-expanded="false">
                    <span class="sr-only">Toggle navigation</span> <span
                        class="icon-bar"></span> <span class="icon-bar"></span> <span
                        class="icon-bar"></span>
                </button>
                <a class="navbar-brand" href="${s:mvcUrl('HC#index').build()}">Casa do Código</a>
            </div>
            <div class="collapse navbar-collapse"
                id="bs-example-navbar-collapse-1">
                <ul class="nav navbar-nav">
                    <li><a href="${s:mvcUrl('PC#listar').build()}">Lista de Produtos</a></li>
                    <li><a href="${s:mvcUrl('PC#form').build()}">Cadastro de Produtos</a></li>
                </ul>
            </div>
            <!-- /.navbar-collapse -->
        </div>
    </nav>



    <div class="container">

    <h1>Cadastro de Produto</h1>
    <form:form action="${s:mvcUrl('PC#gravar').build() }" method="post" 
    commandName="produto" enctype="multipart/form-data">
        <div class="form-group" >
            <label>Título</label>
            <form:input path="titulo" cssClass="form-control" />
            <form:errors path="titulo" />
        </div>
        <div class="form-group">
            <label>Descrição</label>
            <form:textarea path="descricao" cssClass="form-control" />
            <form:errors path="descricao" />
        </div>
        <div class="form-group">
            <label>Páginas</label>
            <form:input path="paginas" cssClass="form-control"/>
            <form:errors path="paginas" />
        </div>
        <div class="form-group">
            <label>Data de  Lançamento</label>
            <form:input path="dataLancamento" cssClass="form-control" />
            <form:errors path="dataLancamento" />
        </div>
        <c:forEach items="${tipos}" var="tipoPreco" varStatus="status">
            <div class="form-group">
                <label>${tipoPreco}</label>
                <form:input path="precos[${status.index}].valor" cssClass="form-control" />
                <form:hidden path="precos[${status.index}].tipo" value="${tipoPreco}"/>
            </div>
        </c:forEach>
        <div class="form-group">
            <label>Sumário</label>
            <input name="sumario" type="file" class="form-control"/>
        </div>
        <button type="submit" class="btn btn-primary">Cadastrar</button>
    </form:form>
    </div>
</body>
</html>
9 respostas

Oi Bruno,

Poste aqui sua classe SecurityConfiguration, por favor.

Abraço!

package br.com.casadocodigo.loja.conf;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpMethod;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

import br.com.casadocodigo.loja.daos.UsuarioDAO;


@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Autowired
        private UsuarioDAO usuarioDao;

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
            .antMatchers("/produtos/form").hasRole("ADMIN")
            .antMatchers("/carrinho").permitAll()
            .antMatchers(HttpMethod.POST,"/produtos").hasRole("ADMIN")
            .antMatchers(HttpMethod.GET, "/produtos").hasRole("ADMIN")
            .antMatchers("/produtos/**").permitAll()
            .antMatchers("/").permitAll()
            .anyRequest().authenticated()
            .and().formLogin();
        }

        @Override
        public void configure(WebSecurity web) throws Exception {
            web.ignoring().antMatchers("/resources/**");
        }

        @Override
        protected void configure(AuthenticationManagerBuilder auth) throws Exception {
            auth.userDetailsService(usuarioDao).passwordEncoder(new BCryptPasswordEncoder());
        }

}

Segue minha classe SecurityConfiguration como pedido Otávio. Obrigado.

Infelizmente ainda não consegui nenhuma solução. Alguém poderia me ajudar ?

Boa tarde, Bruno! Como vai?

Pelo que vc falou e pelo exemplo de link que vc tentou acessar, me parece que eles estão errados! O exemplo de link que vc deu foi:

http://localhost:8080/casadocodigo/WEB-INF/views/produtos/form.jsp/produtos

O correto, segundo as aulas do curso, deveria ser:

http://localhost:8080/casadocodigo/produtos/form

Vc talvez tenha errado na forma como está gerando os link ou em alguma configuração do spring. Vc já deu uma conferida nisso?

Boa noite Gabriel! Primeiramente Obrigado pela disposição em ajudar.

Então, apaguei toda configuração do Spring security que tinha feito junto com o vídeo para testar se é mesmo o Spring security que é o problema e realmente quando eu sigo com o código até o capítulo do bootStrap os links do menu e o form funcionam normalmente. A partir do momento que sigo as configurações do vídeo da terceira atividade ("Autorizando Acesso") os links param de funcionar e apresentam aquele erro de path como eu citei acima. Já refiz tudo, conferi e o problema persiste. O que posso fazer? Obrigado.

Opa, Bruno!

Vc está utilizando a mesma versão do Spring Security que o instrutor usa durante o curso?

Outra coisa, aos 11:27 dessa aula é utilizada a anotação @EnableWebMvcSecurity na classe SecurityConfiguration. No entanto, nessa classe vc utiliza uma anotação diferente, a @EnableWebSecurity.

Talvez esse seja o problema. Veja se fazendo essa mudança o seu problema é resolvido. Caso ainda persista o problema, avisa aqui que eu continuo tentando te ajudar.

Boa tarde.

Estou usando a versão do Spring security que é falada na transcrição do vídeo. Não estou utilizando a mesma annotation que aparece no vídeo porque ela foi depreciada, então na transcrição mesmo é solicitada a mudança para a @EnableWebSecurity. Mas cheguei até mesmo testar com a anotação do vídeo e mesmo assim não funciona. Obrigado pela ajuda.

Bruno, então vamos fazer o seguinte: vc poderia compartilhar o seu projeto comigo? Pode ser pelo github, google drive ou dropbox e depois mandar o link aqui no fórum. Daí poderei dar uma olhada melhor no que está acontecendo e tentarei te ajudar.

Gabriel, Segue projeto no git como pedido - https://github.com/Brunodsm/casadocodigo, Obrigado pela ajuda.