在SpringBoot + Shiro (二)身份校验和角色设置的基础上,添加一个UserInfoController
@Controller
@RequestMapping("/userInfo")
public class UserInfoController {
/**
* 用户查询.
* @return
*/
@RequestMapping("/userList")
public String userInfo(){
return "userInfo";
}
/**
* 用户添加;
* @return
*/
@RequestMapping("/userAdd")
public String userInfoAdd(){
return "userAdd";
}
@RequestMapping("/userDel")
public String userInfoDel() {
return "userDel";
}
}
这时候启动项目,上面的几个请求在登录之后我们都是可以访问的,并且不会执行doGetAuthorizationInfo()
打印权限验证信息。如果我们要限制某些人必须有一定的权限才能访问,怎么办呢?
首先,需要开启Shiro AOP注解支持,在com.example.demo.config.Shiro.ShiroConfiguration
中加入以下代码开启:‘
/**
* 开启shiro aop注解支持.
* 使用代理方式;所以需要开启代码支持;
* @param securityManager
* @return
*/
@Bean
public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager securityManager){
AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor = new AuthorizationAttributeSourceAdvisor();
authorizationAttributeSourceAdvisor.setSecurityManager(securityManager);
return authorizationAttributeSourceAdvisor;
}
然后,在controller中加入相应的注解即可:
/**
* 用户查询.
* @return
*/
@RequestMapping("/userList")
@RequiresPermissions("userInfo:view")
public String userInfo(){
return "userInfo";
}
/**
* 用户添加;
* @return
*/
@RequestMapping("/userAdd")
@RequiresPermissions("userInfo:add")
public String userInfoAdd(){
return "userInfoAdd";
}
@RequestMapping("/userDel")
@RequiresPermissions("userInfo:del")
public String userInfoDel() {
return "userInfoDel";
}
这时候,我们再登录之后访问http://localhost:8080/userInfo/userDel
就会报org.apache.shiro.authz.AuthorizationException
异常了。同时后台会打印权限验证的信息。
关于怎么处理这个没权限的异常,如果是在ShiroConfiguration
中配置403
是不起作用的,具体请参考setUnauthorizedUrl("/403")不起作用.
到此,我们的工程目录如下:
Exception包中添加的是Spring MVC统一异常处理类,同时也添加了403.html页面来显示没有权限页面。异常处理类一定要到启动类中注册Servlet:
// 注册统一异常处理bean
@Bean
public MyExceptionResolver myExceptionResolver() {
return new MyExceptionResolver();
}
SpringBoot + Shiro (一)基础工程搭建
SpringBoot + Shiro (二)身份校验和角色设置
SpringBoot + Shiro (三)权限
SpringBoot + Shiro (四)缓存&记住密码
SpringBoot + Shiro (五)验证码
最后,感谢几位作者的文章解惑:
springboot整合shiro-登录认证和权限管理
Spring Boot Shiro权限管理【从零开始学Spring Boot】
Spring boot 中使用Shiro
最后帮朋友打个小广告