Olá Gabi,
vamos por partes, primeiro vamos assumir que a sua aplicação GWT é iniciada quando o usuário tenta acessar index.html do seu site, nesse momento, com as configurações de autenticação do padrão servlet, o web continer irá perceber que o usuário não está logado, então o próprio web container irá se encarregará de exibir a página de login, se o usuário se autenticar de forma errônea, então o próprio container também se encarregará de exibir o form de erro. Abaixo segue mais ou menos o que você tem que fazer. Nesse caso vou demonstrar a configuração no tomcat.
No seu web.xml
<security-constraint>
<web-resource-collection>
<web-resource-name>adm roles for application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>adm</role-name>
</auth-constraint>
<!-- <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint> -->
</security-constraint>
<login-config>
<auth-method>FORM</auth-method>
<form-login-config>
<form-login-page>/login</form-login-page>
<form-error-page>/erro</form-error-page>
</form-login-config>
</login-config>
<security-role>
<role-name>adm</role-name>
</security-role>
No seu context. xml
<Realm className=“org.apache.catalina.realm.JDBCRealm” debug=“99”
driverName="" connectionURL=""
userTable="" userNameCol="" userCredCol=""
userRoleTable="" roleNameCol="" />
Agora vou tentar explicar o que está acontecendo.
No elemento <security-constraint> defini-se as restrições de segurança para aplicação. Nele defini-se coisas como url, método http que será filtrado, nome da regra, etc. Tudo isso você pode acompanha na especificação Servlet. Nesse caso nós não definimos quais os métodos HTTP serão filtrados, se eu não me engano, quando não se defini os métodos, o web container irá filtrar todos os métodos do protocolo HTTP, é só olhar na especificação para ver se é isso mesmo. O elemento <user-data-constraint> que nós deixamos comentando, define se o protocolo https será ativado, então para ativar o protocolo https, você pode remover os comentários desse elemento, mas note que caso você o faça, não esqueça que você deve instalar um certificado que será utilizado pelo container com esse protocolo.
No elemento <login-config>, você define o método de autenticação, nesse caso escolhemos o método form, e nesse caso especificamos as páginas de login e de erro. No meu caso, quando eu faço isso, eu prefiro utilizar os JSPs de login e de erro dentro do WEB-INF e mapear-lo como um servlet.
Na página de login, você vai ter mais ou menos isso aqui:
…
<form id=“form” action=“j_security_check” method=“post”>
User: <input id=“user” type=“text” name=“j_username”>
Password: <input id=“senha” type=“password” name=“j_password”>
<input id=“entra” name=“entrar” type=“submit” value=“Entrar”>
</form>
…
Na página de erro, normalmente se coloca uma mensagem de erro e um link para o usuário voltar para a página de login ou para o contexto o qual o usuário tentou acessar.
No elemento <security-role> defini-se qual o nome da regra que será usada em <auth-constraint>, nesse caso especificamos adm, o que significa que além do usuário ser válido no banco de dados, ele também terá que pertencer a regra adm. Isso é configurado no elemento <Realm> do arquivo context que fica no diretório META-INF, nesse elemento você vai definir os atributos como; qual o drive jdbc que você vai utilizar, url de conexão, o nome da tabela de usuários, o nome da coluna que contém os nomes de usuários da tabela de usuários, o nome da coluna que contém as senhas de usuários da tabela usuários, o nome da tabela de regras e o nome da coluna que contém os nomes das regras. Lembre-se, no nosso caso, o usuário deve pertencer a regra adm. Note que a tabela de regras se relaciona com a tabela de usuários, nesse link aqui da documentação do tomcat, é mostrado os passos necessários para se criar um JDBCRealm.
Se eu não esqueci nada, é mais ou menos isso daí que você tem fazer.
Uma outra alternativa seria você criar filtros, e fazer tudo na mão grande, mas vai dar mais trabalho, ultimamente eu tenho feito assim, com filtros e tudo na mão grande.
Qualquer coisa estamos aí.
Abraço.