在实际开发中,我们往往需要对一些方法访问进行控制,这样会更加灵活,能够更好的控制,给程序设计有更多的自由度。
在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()支持的表达式。
测试:
试试其他规则,如拥有权限:
测试:
至此基本的基于注解访问案例也讲解完毕