SpringBoot + Shiro (三)权限

最终demo

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")不起作用.

到此,我们的工程目录如下:

1117475-197cf0f66ff5b6ee@3x.png

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


最后帮朋友打个小广告

一个有趣的迷你小程序

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容