sec preauthorize multiple method isauthenticated hasrole hasauthority examples java spring-security

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() {}