Solucionado (ver solução)
Solucionado
(ver solução)
8
respostas

s:mvcUrl('HC#index')

Olá boa noite, não estou conseguindo ir para as próximas páginas depois de ter inserido o login corretamente o erro que aparece é este abaixo, o erro também se perdura quando tento acessar paginas que não precisa de permissão:

'GRAVE: Servlet.service() for servlet [jsp] threw exception
java.lang.IllegalArgumentException: Mapping not found: HC#index
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:463)
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:433)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstFunction.getValue(AstFunction.java:199)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:137)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:702)
    at org.apache.jsp.WEB_002dINF.views.produtos.form_jsp._jspService(form_jsp.java:189)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
...
jan 30, 2019 10:26:56 PM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [dispatcher] in context with path [/casadocodigo] threw exception [javax.el.ELException: Problems calling function [s:mvcUrl]] with root cause
java.lang.IllegalArgumentException: Mapping not found: HC#index
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:463)
    at org.springframework.web.servlet.mvc.method.annotation.MvcUriComponentsBuilder.fromMappingName(MvcUriComponentsBuilder.java:433)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.el.parser.AstFunction.getValue(AstFunction.java:199)
    at org.apache.el.parser.AstValue.getValue(AstValue.java:137)
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:190)
    at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:702)
    at org.apache.jsp.WEB_002dINF.views.produtos.form_jsp._jspService(form_jsp.java:189)
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:476)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
...'''
8 respostas

A SecurityConfiguration.java:

package br.com.casadocodigo.loja.conf;

import org.springframework.beans.factory.annotation.Autowired;    
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.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;

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

@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{

    @Autowired
    private UsuarioDAO usuarioDao;

    @Override
    protected void configure(AuthenticationManagerBuilder auth) 
            throws Exception {

        auth.userDetailsService(usuarioDao)
            .passwordEncoder(new BCryptPasswordEncoder());
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/produtos/form").hasRole("ADMIN")
            .antMatchers("/carrinho/**").permitAll()   
            .antMatchers("/produtos").hasRole("ADMIN")
            .antMatchers("/produtos/").hasRole("ADMIN")
            .antMatchers("/produtos/**").permitAll()
            .antMatchers("/resources/**").permitAll()
            .antMatchers("/pagamento/**").permitAll()
            .antMatchers("/").permitAll()
            .anyRequest().authenticated()
            .and().formLogin().loginPage("/login")
                .defaultSuccessUrl("/produtos").permitAll()
            .and().logout()
                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
                    .permitAll().logoutSuccessUrl("/login");    
    }
}

A Lista.jsp:

<%@ 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" prefix="s"%>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<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-botton: 60px 0px;
    }
</style>
<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>
</head>
<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 id="navbar" class="collapse navbar-collapse">
    <ul class="nav navbar-nav">
        <li class="nav-item">
            <a href="${s:mvcUrl('PC#listar').build()}">
                Lista de Produtos
            </a>
        </li>
        <li class="nav-item">
            <a href="${s:mvcUrl('PC#form').build()}">
                Cadastro de Produtos
            </a>
        </li>
    </ul>
    <ul class="nav navbar-nav navbar-right">
        <li class="nav-item">
        </li>
    </ul>
</div><!-- /.navbar-collapse -->
    </div>
</nav>

<body>
    <div class="contaainer">
    <h1>Lista de Produtos</h1>

    <div>${sucesso }</div>
    <div>${falha }</div>

    <table class="table table-bordered table-striped table-hover">
        <tr>
            <th>Título</th>
            <th>Descrição</th>
            <th>Páginas</th>
        </tr>
        <c:forEach items="${produtos }" var="produtos">
            <tr>
                <td><a href="${s:mvcUrl('PC#detalhe').arg(0, produtos.id).build() }">${produtos.titulo }</a> </td>
                <td>${produtos.descricao }</td>
                <td>${produtos.paginas }</td>
            </tr>
        </c:forEach>
    </table>
    </div>
</body>
</html>

O from.jsp:

<%@ 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>
<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-botton: 60px 0px;
}
</style>
<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>
</head>
<nav class="navbar navbar-inverse">
<div class="container">
    <div class="navbar-header">

        <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>

<body>
<h1>Cadastro de Produto</h1>
<form:form action="${s:mvcUrl('PC#gravar').build()}" method="POST" 
        modelAttribute="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" />
        <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>
</body>
</html>

Oi Samuel,

Como está mapeado o seu @RequestMapping no controller?

Olá Otávio, segue abaixo o HomeController.java

package br.com.casadocodigo.loja.controllers;

import java.util.List;    

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import br.com.casadocodigo.loja.dao.ProdutoDAO;
import br.com.casadocodigo.loja.models.Produto;

@Controller

public class HomeController {

    @Autowired
    private ProdutoDAO produtoDao;

    @RequestMapping("/produtos")
    @Cacheable(value="produtosHome")
    public ModelAndView index() {
        ModelAndView modelAndView = new ModelAndView("home");
        List<Produto> produtos = produtoDao.listar();
        modelAndView.addObject("produtos", produtos);

        return modelAndView;
    }
}
solução!

antes era @RequestMapping("/") mudei para "/produtos" o erro ainda persiste.

Sou ainda iniciante no mundo do spring e servlets, mas vejo que a extensão WebMvcConfigurerAdapter, está depreciada a partir do java 8.

Foi a organização do arquivos e algum problema por causa do requestMapping