Springboot整合Shiro之授权
- 2019 年 12 月 2 日
- 筆記
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://dpb-bobokaoya-sm.blog.csdn.net/article/details/103326945
本文我们来介绍SpringBoot整合Shiro来实现授权
的操作
一、注解的使用方式
1.配置类修改
在权限校验的时候,我们一般在控制中通过注解来实现权限的校验,但我们需要放开注解的使用,在配置文件中的使用方式如下:

对应的在配置类中的设置如下:
/** * 开启授权注解使用方式 * @param manager * @return */ @Bean public AuthorizationAttributeSourceAdvisor authorizationAttributeSourceAdvisor(SecurityManager manager){ AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor(); advisor.setSecurityManager(manager); return advisor; }
2.自定义realm方法
在自定义的realm中实现授权方法
** * 授权的方法 * @param principalCollection * @return */ @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) { User user = (User) principalCollection.getPrimaryPrincipal(); System.out.println("授权的账号是:" + user.getUsername()); // 模拟权限 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); info.addRole("role1"); return info; }
3.业务处理
我们创建UserController,对相关的不同方法设置不同的访问权限,如下
package com.dpb.springboot41shiro.controller; import org.apache.shiro.authz.annotation.Logical; import org.apache.shiro.authz.annotation.RequiresRoles; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; /** * @program: springboot-41-shiro * @description: * @author: 波波烤鸭 * @create: 2019-11-29 21:37 */ @Controller @RequestMapping("/user") public class UserController { @RequiresRoles(value = {"role1"},logical = Logical.AND) @RequestMapping("/query") public String query(){ System.out.println("用户查询..."); return "/user"; } @RequiresRoles(value = {"role2"},logical = Logical.AND) @RequestMapping("/update") public String update(){ System.out.println("用户更新..."); return "/user"; } }
4.测试
访问’/user/query’有权限,访问’/user/update’就没有权限。登录成功后访问


5.自定义异常类
当没有访问权限时,我们是直接通过系统error页面来提示的,我们可以通过自定义的异常页面来提示,用户体验会更好些,之前在配置文件中的配置方式是:

那么对于的在java配置类中。
/** * 全局异常处理器 * @return */ @Bean public SimpleMappingExceptionResolver simpleMappingExceptionResolver(){ SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver(); Properties mappings = new Properties(); mappings.setProperty("UnauthorizedException","/403"); resolver.setExceptionMappings(mappings); // None by default resolver.setDefaultErrorView("error"); // No default resolver.setExceptionAttribute("exception"); // Default is "exception" return resolver; }
效果:

二、Shiro标签的使用
除了通过注解来验证权限,我们在页面中对权限校验的时候通过shiro标签库会更方便些,所以我们来看下SpringBoot中结合Thymeleaf来使用shiro标签库要怎么使用
1.添加对应的依赖
使用shiro的标签库我们需要单独在引入如下的依赖。
<dependency> <groupId>com.github.theborakompanioni</groupId> <artifactId>thymeleaf-extras-shiro</artifactId> <version>2.0.0</version> </dependency>
2.配置类修改
在配置类中我们需要注册 ShiroDialect对象
//用于thymeleaf模板使用shiro标签 @Bean public ShiroDialect shiroDialect() { return new ShiroDialect(); }
3.在页面中配置及使用
我们需要在页面头部引入此
xmlns:shiro="http://www.pollix.at/thymeleaf/shiro"
Shiro便签的使用
<!DOCTYPE html> <html lang="en" xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro" > <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>用户管理</h1> <span shiro:hasRole="role1">权限1</span><br> <span shiro:hasRole="role2">权限2</span><br> <shiro:authenticated> 已登录 </shiro:authenticated> <shiro:principal property="username"></shiro:principal> <shiro:guest>游客</shiro:guest> </body> </html>
4.测试
登录后访问如下:

说明标签库起作用了!