Boa Tarde, estou com um problema chato, no meu cabeçalho que é chamado pelo "PageTemplate", parece que o encoding não funciona no cabeçalho:
CABEÇALHO------------------------------
<%@ taglib uri="http://www.springframework.org/tags" prefix="s" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%@ taglib uri="http://www.springframework.org/security/tags" prefix="security" %> <!-- Spring Security -->
<!-- CRIA BARRA DE NAVEGA��O NO TOPO DA P�GINA (COMO UM CABE�ALHO) -->
<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()}">TELA INICIAL - AÇÃO</a>
</div>
<div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
<ul class="nav navbar-nav">
<!-- PARTE DO MEIO DA BARRA DE NAVEGAÇÃO -->
<li><a href="${s:mvcUrl('EAC#indexAvariados').build()}">Nova Entrada</a></li>
</ul>
<ul class="nav navbar-nav navbar-right">
<li><a href="${s:mvcUrl('CC#telaConfig').build()}">CONFIG</a></li> <!-- PARTE DA DIREITA DA BARRA DE NAVEGA��O -->
</ul>
<!-- MOSTRA QUEM ESTÁ LOGADO E O BOTÃO DE LOGOUT -->
<security:authorize access="isAuthenticated()">
<li><a href="#"> <!-- Criando um link falso(só para mostrar) -->
<security:authentication property="principal" var="usuario" /> <!--security:authentication property="principal.username" Aqui vai mostrar o usuário Logado, "principal" = Uma descrição padrão de todos os FRAMEWORK de SECURITY para indicar o USUÁRIO PRINCIPAL -->
Login: ${usuario.nome}
</a></li>
<!-- UM BOTÃO DE LINK, FEITO PARA LOGOUT (Leva para a URL logout" que é reconhecida pelo SecutiyConfiguration -->
<li>
<a href='<c:url value="/logout" />'>Logout</a>
</li>
</security:authorize>
</div><!-- /.navbar-collapse -->
</div>
</nav>
PAGE TEMPLATE --------------------------------
<%@ tag language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!-- Guarda atributos que serão utilizados nesse template enviados -->
<%@ attribute name="titulo" required="true"%>
<%@ attribute name="extraScripts" fragment="true"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<meta http-equiv="Content-Type" content="IE=edge,chrome=1">
<title>${titulo} - Gigor Planilhas</title>
<!-- Import do BOOTSTRAP -->
<c:url value="/resources/css" var="cssPath" />
<c:url value="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" var="javaScript"/>
<script type="text/javascript" src="${javaScript}" ></script>
<link rel="stylesheet" href="${cssPath}/bootstrap.min.css" />
<link rel="stylesheet" href="${cssPath}/bootstrap-theme.min.css" />
<style type="text/css">
a.navbar-brand {
float: left;
height: 50px;
padding: 15px 15px;
font-size: 18px;
line-height: 20px;
}
select.form-control {
width: 18%
}
input#quantidadeTotal.form-control{
width: 23%
}
input#dataVencimento.form-control{
width: 23%
}
</style>
</head>
<body>
<!-- Importa para esse TEMPLATE O CABEÇALHO/RODAPE E O CORPO -->
<!-- Corpo = Todo o código das JSP que estão entre tags:pageTemplate -->
<%@ include file="/WEB-INF/views/cabecalho.jsp" %>
<jsp:doBody />
<%@ include file="/WEB-INF/views/rodape.jsp" %>
<jsp:invoke fragment="extraScripts"/>
</body>
</html>
As configurações do SPRING X SPRING SECURITY
SPRING SERVLET
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter(); // Define o encoding do PROJETO
encodingFilter.setEncoding("UTF-8");
return new Filter[] {encodingFilter}; // Local de todos os filtros utilizados no PROJETO
}
SPRING SECURITY -------------------------
package br.com.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.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.web.csrf.CsrfFilter;
import org.springframework.security.web.util.matcher.AntPathRequestMatcher;
import org.springframework.web.filter.CharacterEncodingFilter;
import br.com.dao.UsuarioDAO;
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter{
@Autowired
private UsuarioDAO usuarioDao;
@Override
protected void configure(HttpSecurity http) throws Exception {
// FORÇANDO O ENCODING, JÁ QUE ESTÁ UTILIZANDO O "SpringSecurity", OBS: depois no "http" add o ".addFilterBefore(filter, CsrfFilter.class); "
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
filter.setForceEncoding(true);
// LOCAL DAS PERMISSÕES E TELA DE LOGIN/LOGOUT
http
.authorizeRequests()
.antMatchers("/").permitAll()
.antMatchers("/popula").permitAll()
.antMatchers("/conf").hasRole("ADMIN")
.antMatchers("/entradaAvariados", "/entradaAvariados/**" ).hasRole("ADMIN")
.antMatchers("/fornecedores").hasRole("ADMIN")
.antMatchers("/empresas", "/empresas/**").hasRole("ADMIN")
.antMatchers("/produtoPorFornecedor/remover**").hasRole("ADMIN")
.antMatchers("/fornecedores/**").hasAnyRole("ADMIN" , "PADRAO")
.antMatchers("/produto**").hasAnyRole("ADMIN", "PADRAO")
.antMatchers("/produtoPorFornecedor**" , "/produtoPorFornecedor/lista/**").hasAnyRole("ADMIN" , "PADRAO")
.antMatchers(HttpMethod.POST, "/fornecedores/lista**").denyAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login").permitAll()
.and()
.logout().logoutRequestMatcher(new AntPathRequestMatcher("/logout")).logoutSuccessUrl("/")
.and()
.exceptionHandling().accessDeniedPage("/falha")
.and()
.addFilterBefore(filter, CsrfFilter.class);
/**
* -> [OBSERVAÇÕES]
* * hasRole() = No banco de dandos tem na tabela ROLE e USUARIO_ROLE, tem que salvar "ROLE_NomeDaPermissao"
*
* 1> exceptionHandling().accessDeniedPage("/falha") = Modifica a página que leva para o "Acesso não permitido" (ERRO 403), aqui é posto o REQUESTMAPPING (HomeController)
* 2> hasAnyRole = Cabe mais de 1 ROLE
* 3> logoutSuccessUrl("/") = Caso o logout seja efetuado com sucesso, será encaminhado para o REQUESTMAPPING "/"
*
*/
// super.configure(http); // POR PADRÃO ESSE MÉTODO HERDADO(SUPER) libera todos os acessos
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
// A classe passada aqui é preciso IMPLEMENTS "UserDetailsService"
auth.userDetailsService(usuarioDao)
.passwordEncoder(new BCryptPasswordEncoder());
}
/*
* Na sua classe de configuração do Spring Security,
* você precisa liberar o acesso à pasta de arquivos estáticos.
*
* Para que o SPRING consiga pegar os arquivos CSS, e não seja blequado pela segurança
*/
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**");
// OBS: Poderia add no primeiro conf: .antMatchers("/resources/**") (TALVEZ)
}
}
Já tentei diversas configurações e até o FILTER do XML, mas não consigo fazer que o ENCODING do cabeçalho leia os caracteres especiais corretamente, alguém teria alguma idéia ?