开发者学堂课程【Spring Security知识精讲与实战演示(二):权限控制之开启动态权限注解支持】学习笔记与课程紧密联系,让用户快速学习知识
课程地址:https://developer.aliyun.com/learning/course/731/detail/13050
权限控制之开启动态权限注解支持
内容介绍:
一、 注解支持权限控制开启步骤
二、 三种注解方式
三、举例说明
一、注解支持权限控制开启步骤
首先要想在处理器类或者业务层 service 类上添加注解来动态的控制权限,就要开启对应注解的支持,如图假如将这个权限控制(spring-secunity.xml)开启到这边,
在(spring-secunity.xm)l 边开,和在这里 (applicationContext.xml) 边开是一样的,注意这两个配置文件是将这份文件引入到这里边,也可以说applicationContext.xml 是由 IOC 父容器加载,所以这两个放到那里边都是可以的,假如把它放到这边开启权限控制的注解支持,接下来找到这个标签还是 security,有一个叫 global method security。
二、三种注解方式
有三种注解方式,首先第一个 enabled 开启,接下来第二个 enabled 开启,第三个enabled开启。第一个的意思,Secured-annotations=‘’enabled’’ 这个是最正统的,是 springSecured 内部的权限控制注解开关。只要将它改成enabled,就可以使用 springSecured 内部已经制定好的权限控制,第二个 pre-post-annotations=’’enabled’’ 是spring 指定的权限控制注解开关。
三、举例说明
上面是 spring Security 下面是 spring 不是一样的,比如下面这个是总部,是自己设置的,例如阿里巴巴总部定了一套协议,阿里巴巴下面有淘宝,天猫,支付宝,他各自内部还可以有自己的注解,就相当于分公司,所以这两套注解,开了下面能用总部,开了上面的能用于自己的,spring 框架是给 java 使用的,所以 jsr250-annotations=’’enabled’’表示开启 java250 注解支持,Java定义有很多套规范,其中有一套规范就是叫 Gs250,这一套规范里边提供了有很多的注解,只要将其开启,就开启了Java 对权限控制注解的一个支持。现在已经将开关给开启了,现在对开的位置,是在 spring-security.xml 配置文件,然后将注解加到 contoller 层,也可以加入业务层,但加到产品上这个一般要保持一致,比如现在产品这个列表,
@RequestMapping(‘’/product’’)
Public class ProductController{
可以加入列表也可以加入方法上,这里有一个 secured 对应的就是上面第一个,它们是对应关系,然后就可以直接写需要的角色,要保持一致,比如 aside.jsp 访问产品需要两个角色,Secured 这边也是需要,这边同样要写上一个 ADMIN。现在就认定当前这个访问需要这两个角色,对于加到产品上,重启项目。用小马登录,点击登陆。上面这个没有变产品,小马应该只能访问订单但却访问到了产品,因为两个代码不配套。将刚才那张图再打开如图。
这里边有两个容器,一定要注意一个事情如果注解放在了某一个容器的对象,那么注解支持也要放到对应的配置文件中,否则这两个容器不能共用,不配套。举个例子,比如spring声明式事务要使用注解的时候也要开启一个注解支持。这边应该有一个事物的注解支持,有了它业务层打开一个,才能起作用,现在来看这个注解是放到了业务层,也就是放到了父容器对象里边,放到父容器对象里边对应的注解支持也必须是父容器的内容配置文件,所以注解的支持应该放到父容器配置文件中,假如把这一句tx:annotation-driven给他点到spring-mvc.xml文件事物就控制不住了。这个时候就证明子容器里边开启了注解的支持,但是子容器 contoller 也不可能去加这个注解,所以这就是出现了不配套的情况,用现在这个思路来看注解支持,是放在子容器还是父容器里怎么判断,这配置文件是spring-security配置文件,是被applicationcontoller用给快递配置文件,它被spring application context文件引用了,那么他就是父容器,要注意注解放到了子容器还是父容器上。Product注解放到了容器的对象里边去。注解支持在父容器,注解在子容器,这是两个容器,所以他不启作用,想让它起作用,就必须将这一段controlX放到MVC配置文件中。这配置文件谁加载都一样,只要能读取它就能起作用,那这个地方报错是因为没早约束,重新约束的名字的encoding, Ctrlc ctrlv上面贴了一行,下面要填两行。那到这儿可以看出给它格式化,上面改了同样下面这个地方也得改,加载过后再一次启动项目。这次配套是已经配套好了,再来测试,继续拿xiaoma来登录,这会出现了一个403,这个正好就是想要的结果,xiaoma只访问订单,其他的都不可以,这才叫权限真正控制住了,注意注解的支持一定不要放错。