玩转SpringSecurity之五基于注解的访问控制

2022-08-11 14:26:12

在实际开发中,我们往往需要对一些方法访问进行控制,这样会更加灵活,能够更好的控制,给程序设计有更多的自由度。

Spring Security中提供了一些访问控制的注解。这些注解都是默认是都不可用的,需要通过@EnableGlobalMethodSecurity进行开启后使用。如果设置的条件允许,程序正常执行,如果不允许会报500错误

这些注解可以写到Service接口或方法上,也可以写Controller或Controller的方法上。通常情况下都是写在控制器方法上的,控制接口URL是否允许被访问。

@Secured注解

@Secured是专门用于判断是否具有角色的,能写在方法或类上,参数要以 ROLE_开头。源码如下:
在这里插入图片描述
可见作用范围是方法级别,以及类级别的。

(1)手动开启注解控制使用:
在启动类或者配置类等能够扫描的类上添加,这里直接在配置类上添加:
在这里插入图片描述
在这里插入图片描述
将认证请求相关的都注释了。修改为如下配置:除了通用配置都进行认证
在这里插入图片描述
修改上篇文章提到的,静态页面的子页面的标题忘记该了,把主变为子
在这里插入图片描述
修改我们的此前编写的hi方法。
在这里插入图片描述
这个角色是随便写的,我们使用的账户并没有,所以即使登录访问了/hi也应该不是hello world。
重启登录测试:(确实如此),而其他页面正常
在这里插入图片描述
改为我们有的角色

@Secured("ROLE_admin")

重启测试:
在这里插入图片描述

@PreAuthorize和@PostAuthorize注解

@PreAuthorize和@PostAuthorize都是方法或类级别注解。源码如下:
在这里插入图片描述
在这里插入图片描述
这两个注解的区别如下:

  • @PreAuthorize:表示访问方法或类在执行之前先判断权限,大多情况下都是使用这个注解,注解的参数和access()方法参数取值相同,都是权限表达式。
  • @PostAuthorize:表示方法或类执行结束后判断权限,此注解相对来说很少被使用到。
    (1)开启注解

和上面的类似,这里也是在配置类上开启:
在这里插入图片描述
(2)在Controller的方法上添加注解

在控制器方法上添加@PreAuthorize,参数可以是任何 access()支持的表达式。

在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述
试试其他规则,如拥有权限:
在这里插入图片描述
测试:
在这里插入图片描述
至此基本的基于注解访问案例也讲解完毕

  • 作者:calmtho
  • 原文链接:https://blog.csdn.net/xtho62/article/details/113815945
    更新时间:2022-08-11 14:26:12