Pregunta

Estoy usando Grials para crear una aplicación que funcione principalmente como un marco de servicio. Mi pregunta es: ¿se pueden asegurar los servicios de la misma manera que los controladores?

Ejemplo basado en URI:

class SecurityFilters {
  def filters = {
    all(uri: "/**") {
      before = {
        // Ignore direct views (e.g. the default main index page).
        if (!controllerName) return true
        // Access control by convention. 
        accessControl()
      }
    } 
  } 
}
¿Fue útil?

Solución

No tengo idea de si el complemento Shiro admite esto, pero el Complemento de acegi lo hace, aunque de una manera "experimental" (lo que sea que eso signifique).

Actualizar

Habiendo leído la pregunta correctamente, parece que está preguntando si puede usar filtros para asegurar los servicios. Si este es el caso, entonces Shiro es algo irrelevante, porque son los filtros los que están realizando autorización, no Shiro.

Entonces, para responder a su pregunta sobre si puede usar filtros para asegurar los servicios, la respuesta es no, porque solo tiene acceso al controlador desde un filtro. Sin embargo, puede usar metaprogramación groovy para hacer una intercepción de métodos de estilo AOP en los servicios.

El enfoque básico es:

  • Para cada servicio, agregue un invokeMethod propiedad al metaclase
  • El valor de esta propiedad debe ser un cierre. Este cierre interceptará (es decir, se llama en lugar de) cada método llamado en el servicio.
  • Este cierre debería
    • Realizar las comprobaciones de seguridad
    • Invoca el método original si la autorización es exitosa y lanza una excepción (o muestra un error) si la autorización falla

Aparte

Si es posible, recomendaría utilizar un complemento de seguridad probado (por ejemplo, Shiro, ACEGI) para realizar las verificaciones de autorización en lugar de rodar el suyo de la manera descrita anteriormente.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top