2012-07-18 14 views
9

En nuestra aplicación se planificó utilizar el mecanismo RoleVoter pero nos gustaría para eliminar el prefijo ROLE_ como la seguridad que estamos implementando es más tarea basada de papel basado.¿Por qué RoleVoter de Spring Security necesita un prefijo?

Técnicamente, no hay ningún problema para la implementación pero encontré en la documentación que using the RoleVoter with an empty prefix should be discouraged.

Me pregunto por qué?

AFAICS, el único problema es que, sin el prefijo, el RoleVoter participarán en las decisiones que no tiene la intención de (como el IS_AUTHENTICATED_FULLY, IS_AUTHENTICATED_REMEMBERED, ...) y la fuerza devuelve un acceso denegado en lugar de un abstenerse .

¿Podría confirmar que este es el único problema con un prefijo vacío?

Gracias de antemano M.

Respuesta

13

Sí. Si usa múltiples votantes o un votante personalizado, entonces necesitan saber de alguna manera qué atributos deben consumir. Por ejemplo, si tiene un DayOfTheWeekVoter y tiene un recurso definido con los atributos ROLE_USER,DAY_MONDAY, entonces el RoleVoter podría votar para otorgar acceso porque el usuario tiene el rol "Usuario", pero el DayOfTheWeekVoter podría denegar el acceso porque no es un lunes.

Si no configura RoleVoter con un prefijo, entonces verificaría si el usuario tiene asignada la autoridad denominada "DAY_MONDAY", por lo que este escenario no funcionará.

Si solo está interesado en los roles, puede hacerlo sin un prefijo, o puede usar expresiones (como hasRole('user')) que no usan un RoleVoter.

+1

Hola Luke, acabo de actualizar Spring Boot de 1.2.2 a 1.3.2 y esto comenzó a frenar para mí. Mis controladores tienen @PreAuthorize ("hasRole ('Edit')") y ahora está comenzando a buscar el prefijo ROLE_. Parece que tu explicación de hasRole() ha cambiado desde que publicaste esta respuesta porque está pasando por RoleVoter. Traté de encontrar maneras de configurar el prefijo para que se vacíe "" pero ninguno de ellos funciona ... ¿Puedes recomendar otra forma de hacerlo en Spring Boot 1.3.2? – szxnyc

+2

Lo cambié a HaaAuthority y funcionó. – szxnyc

Cuestiones relacionadas