Asegurar devel griales de aplicaciones con una sola contraseña como htpasswd
-
28-09-2019 - |
Pregunta
Estoy mostrando una aplicación Grails a algunos colegas en un dominio público. Hasta el momento estoy trabajando en el modo de devel y no han desplegado a través de la guerra.
Me necesidad de asegurar la aplicación con el fin de mantener onybody de echarle un vistazo / jugar con él. Tengo un usuario MGMT en el lugar ya, pero antes de sb ve nada me gustaría tener Htpasswd-como protección. Si es posible, no quiero para agrandar la propia aplicación con plugins (por ejemplo, shiro).
Cualquier idea / sugerencia?
Muchas gracias!
Solución
Se puede usar la autenticación HTTP. Autenticación HTTP es muy simple de implementar, pero no es muy seguro o utilizable. Es mejor que el uso de shiro o resorte de seguridad para una solución real. Dicho esto, un filtro simple puede comprobar si hay una cabecera HTTP de Autorización y devolver el código de estado 401 si no está presente. Eso obligará al navegador para que aparezca un cuadro de nombre de usuario / contraseña y vuelva a enviar el formulario con el nombre de usuario y la contraseña codificada en las cabeceras.
filtros Grails debe tener un nombre de clase que termina con "filtros" y entrar en el directorio griales-app / conf. He aquí un ejemplo:
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
}
}
}
}
Otros consejos
Añadir lo siguiente a $ CATALINA_HOME / conf / tomcat-users.xml y reiniciar Tomcat:
<role rolename="role1"/>
<user username="user1" password="password1" roles="role1"/>
A su raíz del proyecto Grails, ejecutar grails install-templates
. Este lugar será src / templates / guerra / web.xml en el proyecto.
(En caso de que el archivo no es visible en su IDE, esto podría ser un error. A continuación, la encontramos en el sistema de archivos.)
Añadir la siguiente a web.xml (como un hijo de la etiqueta web-app
):
<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>