Como Visualizar Certificados Digitais no Windows
No Windows, os certificados digitais ficam no repositório da CAPI. Para acessar esse repositório, basta digitar certmgr.msc no menu Iniciar e teclar [Enter] conforme explicado nesse pequeno tutorial.
Os certificados exibidos no Chrome ou no Internet Explorer ficam armazenados no repositório central do Windows, mas o Firefox tem um repositório próprio. Para interagir com ele, dê uma olhada nesse artigo que escrevi a algum tempo.
Problema no Encoding de Páginas JSF no Internet Explorer
Utilizo a implementação do Mojarra do JSF e alguns componentes do Primefaces em meu projeto. Tive problemas com encoding no Internet Explorer (versões 7, 8 e 9). O problema só ocorria ao fazer submit. Com chamadas ajax funcionava normalmente. Fazendo algumas pesquisas fiz descobertas interessantes que vou compartilhar.
O Problema do Encoding
No mundo Java/JSP/Servlet, todo caracter desconhecido passado através do método write() de um OutputStream é impresso como um ponto de interrogação “?”. Um dos casos em que esse caracter é apresentado é quando se tenta utilizar ISO 8859-1 para exibir caracteres Unicode, pois o ISO não cobre todo o charset do Unicode.
JSF/Facelets usa UTF-8 para todas as HTTP requests e responses. É necessário configurar o servidor para utilizar o mesmo encoding. Quando você está utilizando um filtro customizado ou uma biblioteca de terceiros que chama request.getParameter() ou qualquer outro método que implicitamente precisa parsear a request para extrair dados, é provável que o JSF ainda não tenha tido tempo para setar o encoding UTF-8 antes da request ser parseada pela primeira vez.
As presenças do filtro do file uploader do Primefaces e do próprio Primefaces explicam porque esse problema ocorre quando faço o submit da página – pois suponho que aquele filtro e mais algum componente do Primefaces interceptam a request – e não ocorre quando faço chamadas ajax.
Uma Possível Solução
Durante o processamento da request, um servidor de aplicação usará por padrão o encoding ISO 8859-1 para decodificar os parâmetros. É necessário forçar o encoding para UTF-8. No caso de um HTTP GET, basta configurar o encoding desejado em algum arquivo de configuração do servidor. Para o Tomcat, por exemplo:
<Connector (...) URIEncoding="UTF-8" />
No caso do URL-decoding dos parâmetros da request de um POST, é esperado que o navegador envie o charset definido no Content-Type do header da request, mas a maioria dos navegadores não envia. O Internet Explorer envia o encoding definido no atributo accept-charset do HTML form, mas essa implementação não funciona em certas circunstâncias e o encoding setado é perdido na request.
Para resolver esse problema, você pode criar um filtro mapeado em /* para setar programaticamente o encoding UTF-8 na ServletRequest quando o navegador é o Internet Explorer (família MSIE) e quando não há encoding setado:
public class EncodingFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) request; String browser = req.getHeader("USER-AGENT"); boolean ieBrowser = browser != null && browser.toUpperCase().contains("MSIE"); boolean hasEncode = req.getCharacterEncoding() != null; if (ieBrowser && !hasEncode) req.setCharacterEncoding("UTF-8"); chain.doFilter(req, response); } @Override public void init(FilterConfig arg) throws ServletException { } @Override public void destroy() { } }
Mapeamento do filtro no web.xml:
<filter> <filter-name>EncodingFilter</filter-name> <filter-class> encoding.filter.EncodingFilter </filter-class> </filter> <filter-mapping> <filter-name>EncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
Referências
http://balusc.blogspot.com.br/2009/05/unicode-how-to-get-characters-right.html
http://stackoverflow.com/questions/2006826/jsf-form-and-german-umlauts