我尝试了解方法级别的资源权限。我知道注解@EnableGlobalMethodSecurity(prePostEnabled = true)
可以定义注解``
使用Spring Expression Language的@PreAuthorize
或@PreAuthorize
可以更好地控制对资源的访问,但是基本上我可以在没有@EnableGlobalMethodSecurity
的情况下实现这一点,例如
@GetMapping("/hasscope")
@PreAuthorize("#oauth2.isOAuth() and #oauth2.hasScope('GITHUB') or
#oauth2.hasScope('ROLE')")
public String helloScope(final Principal principal) {
return "This method use preauthorize annotation !";
}
我无需使用此注释即可访问#oauth2
对象,并且可以像上面一样创建自定义表达式规则。
我省略了一些内容,或者我没有正确理解。使用that或仅忽略之间有什么区别?它以什么形式提高了方法的安全性?