springSecurity标签,特别是@PreAuthorize

spring security中可以通过表达式控制方法权限:

  • @PreAuthorize
  • @PostAuthorize
  • @PreFilter
  • @PostFilter

其中前两者可以用来在方法调用前或者调用后进行权限检查,后两者可以用来对集合类型的参数或者返回值进行过滤。

使用@PreAuthorize和@PostAuthorize进行访问控制

@PreAuthorize可以用来控制一个方法是否能够被调用

Controller层

    /**
     * 根据用户编号获取详细信息
     */
    @PreAuthorize("@ss.hasPermi('system:user:query')")
    @GetMapping(value = {
      "/", "/{userId}" })
    public AjaxResult getInfo(@PathVariable(value = "userId", required = false) Long userId)
    {
     
		...
		...
		...
    }

对应service层

@Service("ss")
public class PermissionService
{
     	
	 /**
     * 验证用户是否具备某权限
     * 
     * @param permission 权限字符串
     * @return 用户是否具备某权限
     */
    public boolean hasPermi(String permission)
    {
     

    }
}

@PreAuthorize("@ss.hasPermi(‘system:user:query’)")表示:

  • @ss标签对应的PermissionService
  • hasPermi方法
  • 传入参数为system:user:query,表示用户的查询权限

@PostAuthorize目前并没有碰到

使用@PreFilter和@PostFilter进行过滤

使用@PreFilter和@PostFilter可以对集合类型的参数或返回值进行过滤。

使用@PreFilter和@PostFilter时,Spring Security将移除使对应表达式的结果为false的元素。
目前碰到的不多。

你可能感兴趣的:(springboot,spring,boot)