java - preauthorize - spring security method
Spring security @PreAurhorize hasRole() inyección de propiedades (2)
suponiendo que mi seguridad de primavera y las propiedades están configuradas correctamente, me gustaría utilizar el nombre de función de la propiedad como
@PreAuthorize("hasRole(''${role.rolename}'')")
public void method() {}
He intentado como en la muestra de código anterior, pero no funciona (se necesita la cadena ''$ {role.rolename}'' para comparar)
si cambio a
@PreAuthorize("hasRole(''ROLE_ADMIN'')")
public void method() {}
funciona bien Mi motivación para tal uso es una mejor flexibilidad en las pruebas de aplicación en diversos entornos.
Descubrí que puedes tomar el PropertyResolver y extraer valores directamente de eso, en lugar de escribir tu propia clase como lo sugirió @Maksym.
Exammple:
@PreAuthorize("hasRole(@propertyResolver.getProperty(''role.rolename'')")
public void method() {}
Intenta eliminar ''''
signos ''''
:
@PreAuthorize("hasRole(${role.rolename})")
public void method() {}
EDITAR. Estoy seguro de que hay una mejor manera, pero como una solución alternativa puede llamar a algún método en algunos bean:
@Component("appVariablesHolder")
public class AppVariablesHolder {
@Value("${role.rolename}")
private String someRole;
public String getSomeRole() {
return this.someRole;
}
}
@PreAuthorize("hasRole(@appVariablesHolder.getSomeRole())")
public void method() {}