SpringBoot权限安全

SpringBoot + Shiro (三)权限

2017-07-05  本文已影响746人  忧郁的小码仔

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

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

工程目录

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

上一篇下一篇

猜你喜欢

热点阅读