之前的我们实现了不同的用户登录之后,可以查看不同的菜单,这个控制是在前段页面使用springsecurity框架的标签进行限制的。现在我们还有另外的方法,那就是在controller层或者service层用注解进行控制,也就是写了注解之后,只有对应的权限才可以访问这个接口,没有的话就不走这个接口,也就走不到后面的业务层,这样就实现了控制。
也就是之前前端的控制只是视觉上面不显示,如果知道了路径还是可以访问对应的接口的。现在要做的就是视觉上面不显示,我后端也要进行控制,你知道了路径也不行,只要对应的用户没有权限,那么对应的后端的接口就不可以访问,只要就实现了全部的保护,前端后端都保护了。
开启注解控制权限的支持的代码放到哪个配置文件里面
之前说过项目里面有很多的容器,application.xml是父容器,springMVC.xml是子容器,springsecurity.xml是被application.xml引用的,所以配置写在springsecurity.xml和application.xml都一样,springsecurity.xml也可以看做是父容器。但是我们的controller层和service层是靠子容器维护的,这个配置的开启要和用注解的地方配对。用注解的地方是controller层和service层,是子容器,所以开启的代码要写在子容器的配置文件里面,所以现在的开启注解控制权限的代码要放在
对,就是放在springMVC.xml里面
代码语言:javascript复制 <!--
开启权限控制的注解支持
secured-annotations="enabled" springSecurity内部的权限控制注解开关
pre-post-annotations="enabled" spring指定的权限控制的注解开关
jsr250-annotations="enabled" 开启java250注解支持
-->
<security:global-method-security
secured-annotations="enabled"
pre-post-annotations="enabled"
jsr250-annotations="enabled"/>
注解实现控制权限的流程
1 开启注解控制权限的支持
开启之后就可以使用对应的注解了。开启代码如下
2 开启了之后,就可以使用了
在以上的controller层写上对应的注解,重新启动项目,用一个什么权限都没有用户登录,登录成功之后我们可以看到菜单是不显示的,因为没有权限,现在我们手动在浏览器输入后端的地址,也是不可以访问的,因为后端的controller上面写了权限控制的注解。这个直接访问后端的路径,没有权限会报错,会有一个默认的403页面的报错。
记住,有以下的注解
代码语言:javascript复制 @Secured({"ROLE_PRODUCT","ROLE_ADMIN"})//springSecurity内部制定的注解
@RolesAllowed({"ROLE_PRODUCT","ROLE_ADMIN"})//jsr250注解
@PreAuthorize("hasAnyAuthority('ROLE_PRODUCT','ROLE_ADMIN')")//spring的el表达式注解