Obtendo um valor de HttpServletRequest.getRemoteUser () no Tomcat sem modificar o aplicativo

(Usando o Java 6 e o ​​Tomcat 6.)

Existe uma maneira de obter o HttpServletRequest.getRemoteUser() para retornar um valor em meu ambiente de desenvolvimento (isto é, localhost) sem precisar modificar o arquivo web.xml do meu aplicativo?

A razão pela qual eu pergunto é que a implementação da autenticação quando o aplicativo é implantado em um ambiente remoto é tratada por um servidor da Web e uma ferramenta conectada. Correndo localmente, obviamente, não tenho a ferramenta plug-in ou um servidor da web separado; Eu só tenho o Tomcat 6. Eu estou tentando evitar a adição de código ao meu aplicativo apenas para apoiar o desenvolvimento no meu localhost.

Espero que haja uma modificação que eu possa fazer nos arquivos context.xml ou server.xml que permitirão definir o ID do usuário remoto ou tentar extraí-lo de um header HTTP ou algo assim.

Aqui está uma prova de conceito da implementação da Valve que faz isso:

 import java.io.IOException; import java.security.Principal; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import org.apache.catalina.connector.Request; import org.apache.catalina.connector.Response; import org.apache.catalina.realm.GenericPrincipal; import org.apache.catalina.valves.ValveBase; public class RemoteUserValve extends ValveBase { public RemoteUserValve() { } @Override public void invoke(final Request request, final Response response) throws IOException, ServletException { final String username = "myUser"; final String credentials = "credentials"; final List roles = new ArrayList(); // Tomcat 7 version final Principal principal = new GenericPrincipal(username, credentials, roles); // Tomcat 6 version: // final Principal principal = new GenericPrincipal(null, // username, credentials, roles); request.setUserPrincipal(principal); getNext().invoke(request, response); } } 

(Testado com o Tomcat 7.0.21.)

Compile-o, coloque-o dentro de um jar e copie o jar para a pasta apache-tomcat-7.0.21/lib . Você precisa modificar o server.xml :

   ... 

Eu suponho que funcione dentro dos contêineres Engine e Context também.

Mais Informações:

  • O componente da válvula
  • Valve javadoc

Use um domínio local baseado em arquivo para teste. Verifique seu conf/tomcat-users.xml e crie funções e usuários para seu aplicativo e ative as restrições de segurança em seu web.xml. Existem bons exemplos no tomcat-users.xml .