Garantir o aplicativo Devel Grails com uma única senha HTPasswd
-
28-09-2019 - |
Pergunta
Estou mostrando um aplicativo Grails para alguns colegas em domínio público. Até agora, estou trabalhando no modo desenvolvido e não foi implantado via guerra.
Preciso proteger o aplicativo para impedir que o Onybody o checasse / brincando com ele. Eu já tenho um usuário MGMT no lugar, mas antes que o SB veja tudo o que eu gostaria de ter proteção do tipo .htpasswd. Se possível, não quero ampliar o próprio aplicativo com plugins (por exemplo, shiro).
Algum pensamento/sugestão?
Muito obrigado!
Solução
Você pode usar a autenticação HTTP. A autenticação HTTP é simples de implementar, mas não é muito segura ou utilizável. É melhor usar o Shiro ou a segurança da mola para uma solução real. Dito isto, um filtro simples pode verificar se há um cabeçalho de autorização HTTP e retornar o código de status 401 se não estiver presente. Isso forçará o navegador a exibir uma caixa de nome de usuário/senha e reenviar o formulário com o nome de usuário e a senha codificados nos cabeçalhos.
Os filtros do Grails devem ter um nome de classe que termine com "filtros" e ir no diretório Grails-App/Conf. Aqui está um exemplo:
class SimpleAuthFilters {
def USERNAME = "foo"
def PASSWORD = "bar"
static filters = {
httpAuth(uri:"/**") {
before = {
def authHeader = request.getHeader('Authorization')
if (authHeader) {
def usernamePassword = new String(authHeader.split(' ')[1].decodeBase64())
if (usernamePassword == "$USERNAME:$PASSWORD") {
return true
}
}
response.setHeader('WWW-Authenticate', 'basic realm="myRealm"')
response.sendError(response.SC_UNAUTHORIZED)
return false
}
}
}
}
Outras dicas
Adicione o seguinte a $ catalina_home/conf/tomcat-sers.xml e reinicie o tomcat:
<role rolename="role1"/>
<user username="user1" password="password1" roles="role1"/>
No seu Projeto Grails Root, execute grails install-templates
. Isso vai colocar src/modelos/war/web.xml no projeto.
(Caso o arquivo não esteja visível no seu IDE, isso pode ser um bug. Encontre -o no sistema de arquivos.)
Adicione o seguinte para web.xml (como criança do web-app
marcação) :
<security-constraint>
<web-resource-collection>
<web-resource-name>
Entire Application
</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>role1</role-name>
</auth-constraint>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Restricted Area</realm-name>
</login-config>