El nombre de usuario j_security_check codificado en UTF-8 se decodificó incorrectamente como Latin-1 en el reino de Tomcat

Estoy investigando un problema en el que se introduce un nombre de usuario con carácter latino-1 en un formulario de inicio de sesión. El nombre de usuario contiene el carácter á. Investigo la parte del servidor donde tengo:

La clase pública MyRealm extiende RealmBase implementa Realm {autenticación principal pública (nombre de usuario de cadena, contraseña de cadena) {... autenticación real implementada aquí}}

Si imprimo los bytes: username.getBytes () veo que el carácter á tiene: C3 83 C2 A1 Normalmente el carácter á en la codificación UTF8 debe tener: C3 A1. Si codifico esto en UTF8 nuevamente, obtengo: C3 83 C2 A1 lo que imprime mi software.

Verifiqué en la red capturando que el nombre de usuario se envía correctamente con C3 A1. El código fuente del formulario de la página de inicio de sesión es:

        <form name="loginForm" action="j_security_check" method="post" enctype="application/x-www-form-urlencoded">
        <table>
            <tr>
                <td colspan="2" align="right">Secure connection:
                    <input type="checkbox" name="checkbox" class="style5" onclick="javascript:httpHttps();"></td>
            </tr>
            <tr>
                <td class="style5">Login:</td>
                <td><input type="text" name="j_username" autocomplete="off" style="width:150px" /></td>
            </tr>

Así que creo que no hay nada malo (2 veces la conversión UTF8) en el lado del cliente. Si decodifico dos veces desde UTF8 en la función authenticate (), el nombre de usuario funciona bien, pero la autenticación funciona bien, pero me da miedo aplicar esta solución a mi problema

¿Dónde debo buscar esta codificación del nombre de usuario en la función de autenticación (nombre de usuario, contraseña de cadena) del Reino? El lado del servidor se ejecuta en un Linux (RedHat) con httpd-2.2.15 y tomcat6-6.0.24.

Respuestas a la pregunta(1)

Su respuesta a la pregunta