2012-05-26 5 views
8

Recientemente desarrollé una aplicación web tomcat en JSP que usa seguridad declarativa (server.xml/web.xml) vinculada al Active Directory de la compañía. Me pidieron que agregara el soporte de JSF al proyecto incipiente. Fue sencillo convertir el formulario de inicio de sesión a jsf, y el modelo de seguridad aún funcionaba.¿Is (isUserInRole()) es la forma más fácil de adjuntar permisos de usuario/seguridad a un botón JSF?

Un asociado me preguntó si podía permitir que un público más amplio viera uno de los informes, pero los botones de acción solo se muestran para un grupo más pequeño. Como soy nuevo en JSF, tuve que investigar un poco.

Pasé cerca de cuatro horas buscando en Google cosas como "seguridad del botón jsf" y "permisos del botón jsf" y probando varias sugerencias que eran en su mayoría callejones sin salida. Otro asociado sugirió usar el modelo de seguridad de Spring, pero no quería tratar con un montón de bibliotecas de Spring si había una manera más fácil de hacerlo.

Finalmente, me encontré con la respuesta, que era increíblemente simple. Solo necesitaba usar el método HttpServletRequest: isUserInRole() para determinar si el usuario actualmente conectado tiene permiso para ver los botones de acción. He usado HttpServletRequests MUCHO durante los últimos diez años, pero no recuerdo haber aprendido nunca sobre ese método. Con JSF, es un asunto sencillo para llegar a ese método, tal como se muestra a continuación:

public boolean isUserInRole(String role) { 
    return (FacesContext.getCurrentInstance().getExternalContext().isUserInRole(role)); 
} 

Mis preguntas específicamente son: ¿existen aspectos críticos de este enfoque debería ser consciente de, y hay otra manera más fácil de hacer ¿eso?

+2

Se puede hacer incluso más simple en EL sin la necesidad de un bean de respaldo: '# {request.isUserInRole ('foo')}' – BalusC

+0

pero en un bean administrado jsf, no tendría acceso a la solicitud, ¿derecho? –

+0

Raramente he tenido la necesidad de hacerlo en un bean de respaldo. Simplemente colóquelo en los atributos 'rendered',' readonly' o 'disabled' en la vista. – BalusC

Respuesta

1

Si usa Tomahawk como un complemento de su implementación JSF, la mayoría de los controles tienen un atributo visibleOnUserRole. Puede usar múltiples nombres de rol en el valor.

+0

esta es realmente una buena información, realmente no sabía nada sobre el complemento de tomahawk, parece ser algo bueno. Una pregunta, si utilizo tomahawk y Primefaces, ¿crees que puedo agregar el atributo visibleOnUserRole a un control de Primefaces (por ejemplo, p: commandButton)? –

+0

Estoy respondiendo mi propia pregunta sobre Primefaces y visibleOnUserRole con este enlace: http://cagataycivici.wordpress.com/2010/03/18/primefaces-el-extensions-for-ui-authorization/ –

Cuestiones relacionadas