在 Spring Security 中,我想保护一个包含返回值并使用@PostAuthorize
.
我想添加一个约束,不允许一个用户访问他们不是所有者的资源。我面临的问题是我想根据一组值检查主体 ID。
设想:
域对象:
public class Car implements Serializable {
private Integer id;
private Collection<Driver> drivers;
...
}
public class Driver implements Serializable {
private Integer id;
...
}
服务:
@PostAuthorize("hasRole('ROLE_ADMIN') or principal.id == returnObject.drivers.driver.id")
public Car getCar(int id) throws DAOException {
...
return carDAO.get(id);
}
当然,这个 Spel 表达式不起作用。
SEVERE: El Servlet.service() para el servlet [dispatcher] en el contexto con ruta [] lanzó la excepción [Request processing failed; nested exception is java.lang.IllegalArgumentException: Failed to evaluate expression 'hasRole('ROLE_ADMIN') or principal.id == returnObject.drivers.driver.id'] con causa raíz
org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 42): Field or property 'driver' cannot be found on object of type 'org.eclipse.persistence.indirection.IndirectList'
我还没有看到任何适用于 Collection 的示例。 这个未解决的问题类似,但我不知道是否符合我的特定情况。有可能做这样的事情吗?这是做我想做的事情的另一种方式吗?