Estoy investigando el tema de la seguridad y los roles de Spring para conseguir hacer roles dinamicamente (por lo que no me vale poner las urls con lo roles en el spring-security-context.xml) y después de conseguirlo parece ser que ahora no deja entrar a ningún usuario a esa url aunque tenga el rol asignado. Os dejo el código a ver si alguien tiene idea de que puede ser.
public class JdbcFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException { FilterInvocation fi = (FilterInvocation) object;
// Instead of hard coding the roles lookup the roles from the database using the url and/or HttpServletRequest // Do not forget to add caching of the lookup String[] roles = new String[]{}; if("/person/list".equals(url)){ roles = new String[] { "ROLE_USER" }; } return SecurityConfig.createList(roles); }
public Collection<ConfigAttribute> getAllConfigAttributes() { return null; }
public boolean supports(Class<?> clazz) { return FilterInvocation.class.isAssignableFrom(clazz); } }
Al iniciar la aplicación creo un usuario con el rol USER
En principio consigo loguearme en la aplicación pero en cuanto llego a /person/list me da el siguiente error (basicamente es que me deniega el acceso por permisos)
2015-08-05 10:01:56.457 [localhost-startStop-1] WARN o.s.s.c.h.DefaultFilterChainValidator - Anonymous access to the login page doesn't appear to be enabled. This is almost certainly an error. Please check your configuration allows unauthenticated access to the configured login page. (Simulated access was rejected: org.springframework.security.access.AccessDeniedException: Access is denied)
A ver si me entero un poco de lo que quieres hacer con tus roles dinámicos, ¿quieres consultar en la BD un perfil de usuario y si lo tiene asignarle un rol?
Buenas
Estoy investigando el tema de la seguridad y los roles de Spring para conseguir hacer roles dinamicamente (por lo que no me vale poner las urls con lo roles en el spring-security-context.xml) y después de conseguirlo parece ser que ahora no deja entrar a ningún usuario a esa url aunque tenga el rol asignado. Os dejo el código a ver si alguien tiene idea de que puede ser.
public class JdbcFilterInvocationSecurityMetadataSource implements FilterInvocationSecurityMetadataSource {
public Collection<ConfigAttribute> getAttributes(Object object) throws IllegalArgumentException {
FilterInvocation fi = (FilterInvocation) object;
String url = fi.getRequestUrl();
HttpServletRequest request = fi.getHttpRequest();
// Instead of hard coding the roles lookup the roles from the database using the url and/or HttpServletRequest
// Do not forget to add caching of the lookup
String[] roles = new String[]{};
if("/person/list".equals(url)){
roles = new String[] { "ROLE_USER" };
}
return SecurityConfig.createList(roles);
}
public Collection<ConfigAttribute> getAllConfigAttributes() {
return null;
}
public boolean supports(Class<?> clazz) {
return FilterInvocation.class.isAssignableFrom(clazz);
}
}
Al iniciar la aplicación creo un usuario con el rol USER
accountRepository.save(new Account("user@user.com", "demo", "ROLE_USER"));
En principio consigo loguearme en la aplicación pero en cuanto llego a /person/list me da el siguiente error (basicamente es que me deniega el acceso por permisos)
2015-08-05 10:01:56.457 [localhost-startStop-1] WARN o.s.s.c.h.DefaultFilterChainValidator - Anonymous access to the login page doesn't appear to be enabled. This is almost certainly an error. Please check your configuration allows unauthenticated access to the configured login page. (Simulated access was rejected: org.springframework.security.access.AccessDeniedException: Access is denied)
Saludos