Methods 为什么要在Spring安全性中保护方法,而不仅仅是URL?

Methods 为什么要在Spring安全性中保护方法,而不仅仅是URL?,methods,spring-security,Methods,Spring Security,Hy URL的安全性还不够吗 有没有一种方法可以让用户在没有所需凭据的情况下调用url,这就是保护方法的原因 一个真实的例子,为什么安全方法是必需的,而不仅仅是URL 谢谢在简单的情况下,通常只保护URL就足够了。考虑将方法级安全性作为URL级安全性的补充。例如,通过URL级别的安全性,可以简单地检查用户是否具有访问应用程序中某个URL的特定角色 但是,在某些情况下,您需要更细粒度的安全性。如果您希望只允许其创建者访问给定的产品(id=5),则不能仅使用URL级别的安全性。但您可以通过方法级

Hy

  • URL的安全性还不够吗
  • 有没有一种方法可以让用户在没有所需凭据的情况下调用url,这就是保护方法的原因
  • 一个真实的例子,为什么安全方法是必需的,而不仅仅是URL

谢谢

在简单的情况下,通常只保护URL就足够了。考虑将方法级安全性作为URL级安全性的补充。例如,通过URL级别的安全性,可以简单地检查用户是否具有访问应用程序中某个URL的特定角色

但是,在某些情况下,您需要更细粒度的安全性。如果您希望只允许其创建者访问给定的产品(id=5),则不能仅使用URL级别的安全性。但您可以通过方法级别的安全性来实现这一点

考虑一下这个URL

https://myapp.com/products/5
您可以检查访问此URL的用户是否具有所需的角色\u角色

<security:intercept-url pattern="/products/**" access="hasRole('REQUIRED_ROLE')" />

“安全方法”是什么意思?好的,谢谢。两个疑问:-#product.creator:creator是产品的一个属性,必须在数据库中-如果有人调用一个方法并且没有权限,那么默认行为是什么(返回拒绝访问的页面?引发异常?)ThanksIt只是一个例子,但基本上是的,creator是产品的属性。如果用户没有所需的权限,将抛出
AccessDeniedException
,处理方式取决于您的配置。是的,但它在哪里配置?对于URL,我知道您可以定义一个自定义的拒绝页面。首先,您必须实现
AccessDeniedHandler
,然后将其分配给
ExceptionTranslationFilter
。您可以借助Spring Security命名空间元素来实现这一点。但是,由于这是一个非常复杂的主题和完全不同的问题,我建议不管怎样,如果你原来的问题已经得到了回答,请将答案标记为已接受,以便其他人可以从中受益。
...

@PreAuthorize("#product.creator == authentication.name")
public void doSomething(Product product);

...