Spring Boot集成Shiro权限验证框架,可参考:

https://shiro.apache.org/spring-boot.html

引入依赖

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring-boot-web-starter</artifactId>
<version>1.4.0</version>
</dependency>

配置Shiro

ShiroConfig

@ConfigurationProperties(prefix = "shiro")
@Configuration
public class ShiroConfig { @Autowired
private ApplicationConfig applicationConfig; private List<String> pathDefinitions; @Bean
public ShiroFilterChainDefinition shiroFilterChainDefinition() {
DefaultShiroFilterChainDefinition chainDefinition = new
DefaultShiroFilterChainDefinition(); applicationConfig.getStaticDirs()
.forEach(s -> chainDefinition.addPathDefinition(s, "anon"));
this.getPathDefinitions().forEach(d -> {
String[] defArr = d.split("=");
chainDefinition
.addPathDefinition(StringUtils.trim(defArr[0]), StringUtils.trim(defArr[1]));
}); return chainDefinition;
} @Bean
public Realm systemRealm() {
SystemRealm systemRealm = new SystemRealm();
return systemRealm;
} public List<String> getPathDefinitions() {
return pathDefinitions;
} public void setPathDefinitions(List<String> pathDefinitions) {
this.pathDefinitions = pathDefinitions;
} }

ApplicationConfig:注入的是application.yml中的配置,略。

SystemRealm:

public class SystemRealm extends AuthorizingRealm {

    @Autowired
private SysAdminMapper sysAdminMapper; @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)
throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
token.setPassword(EcryptUtils.encode(String.valueOf(token.getPassword())).toCharArray
()); SysAdminDO sysAdminParams = new SysAdminDO();
sysAdminParams.setAdminLoginName(token.getUsername());
SysAdminDO sysAdminDO = sysAdminMapper.selectByParams(sysAdminParams); AuthenticationInfo authInfo = null;
if (sysAdminDO != null) {
authInfo = new SimpleAuthenticationInfo(sysAdminDO, sysAdminDO.getAdminLoginPass(),
getName());
}
return authInfo;
} @Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
/**
* 下面为静态示例,根据用户对应权限进行修改
* 根据用户查询对应的角色、权限
*/
SysAdminDO sysAdminDO = (SysAdminDO) super.getAvailablePrincipal(principalCollection);
SimpleAuthorizationInfo authorizationInfo = new SimpleAuthorizationInfo(); Set<String> roles = new HashSet<>();
roles.addAll(Arrays.asList("product", "operation"));
authorizationInfo.setRoles(roles); Set<String> permissions = new HashSet<>();
permissions.addAll(Arrays.asList("product:create", "product:del", "operation:update"));
authorizationInfo.addStringPermissions(permissions); return authorizationInfo;
} }

应用配置

application.yml中加入Shiro配置。

shiro:
loginUrl: /login
successUrl: /
unauthorizedUrl: /error
pathDefinitions:
- /login/submit = anon
- /logout = logout
- /test = authc, roles[product], perms[operation:update]
- /** = authc

loginUrl:没有认证的将会跳到登录页面。

successUrl:认证成功跳转的页面。

unauthorizedUrl:认证失败跳转的页面。

pathDefinitions:用来定义路径授权规则。

更多参数参考官网定义:

https://shiro.apache.org/spring-boot.html#configuration-properties

登录服务类

@Override
public SysAdminDO login(LoginForm form) {
UsernamePasswordToken token = new UsernamePasswordToken(form.getLoginName(),
form.getLoginPassword());
token.setRememberMe(true);
Subject currentUser = getSubject();
try {
currentUser.login(token);
} catch (Exception e) {
logger.error("登录验证失败:", e);
}
return (SysAdminDO) currentUser.getPrincipal();
}

自带的过滤器

anno, authc等更多定义参考类:

org.apache.shiro.web.filter.mgt.DefaultFilter

官网定义:

http://shiro.apache.org/web.html#default-filters

Shiro参考手册高清版,请在公众号菜单回复qq群,在群文件技术教程文件夹中下载获取。

推荐阅读

干货:2TB架构师四阶段视频教程

面经:史上最全Java多线程面试题及答案

面经:史上最全阿里高级Java面试题

面经:史上最全Spring面试题

教程:最全Spring Boot全套视频教程

书籍:进阶Java架构师必看的15本书

工具:推荐一款在线创作流程图、思维导图软件

分享Java干货,高并发编程,热门技术教程,微服务及分布式技术,架构设计,区块链技术,人工智能,大数据,Java面试题,以及前沿热门资讯等。

Spring Boot集成Shiro实战的更多相关文章

  1. Spring Boot 集成Shiro和CAS

    Spring Boot 集成Shiro和CAS 标签: springshirocas 2016-01-17 23:03 35765人阅读 评论(22) 收藏 举报  分类: Spring(42)  版 ...

  2. 解决Spring Boot集成Shiro,配置类使用Autowired无法注入Bean问题

    如题,最近使用spring boot集成shiro,在shiroFilter要使用数据库动态给URL赋权限的时候,发现 @Autowired 注入的bean都是null,无法注入mapper.搜了半天 ...

  3. Spring Boot 集成 RabbitMQ 实战

    Spring Boot 集成 RabbitMQ 实战 特别说明: 本文主要参考了程序员 DD 的博客文章<Spring Boot中使用RabbitMQ>,在此向原作者表示感谢. Mac 上 ...

  4. Spring Boot 集成 Elasticsearch 实战

    最近有读者问我能不能写下如何使用 Spring Boot 开发 Elasticsearch(以下简称 ES) 相关应用,今天就讲解下如何使用 Spring Boot 结合 ES. 可以在 ES 官方文 ...

  5. 十一、Spring Boot 集成Shiro和CAS

    1.Shiro 是什么?怎么用? 2.Cas 是什么?怎么用? 3.最好有spring基础 首先看一下下面这张图: 第一个流程是单纯使用Shiro的流程. 第二个流程是单纯使用Cas的流程. 第三个图 ...

  6. cas 3.5.3服务器搭建+spring boot集成+shiro模拟登录(不修改现有shiro认证架构)

    因为现有系统外部接入需要,需要支持三方单点登录.由于系统本身已经是微服务架构,由多个业务独立的子系统组成,所以有自己的用户认证微服务(不是cas,我们基础设施已经够多了,现在能不增加就不增加).但是因 ...

  7. spring boot 集成 shiro

    写在前面 1.Shiro是Apache下的一个开源项目,我们称之为Apache Shiro.它是一个很易用与Java项目的的安全框架,提供了认证.授权.加密.会话管理,与spring Security ...

  8. Spring Boot 添加Shiro支持

    前言: Shiro是一个权限.会话管理的开源Java安全框架:Spring Boot集成Shiro后可以方便的使用Session: 工程概述: (工程结构图) 一.建立Spring Boot工程 参照 ...

  9. Spring Boot 揭秘与实战(三) 日志框架篇 - 如何快速集成日志系统

    文章目录 1. 默认的日志框架 logback2. 常用的日志框架 log4j 1.1. 日志级别 1.2. 日志文件 3. 源代码 Java 有很多日志系统,例如,Java Util Logging ...

随机推荐

  1. (转)OpenFire源码学习之十一:连接管理(下)

    转:http://blog.csdn.net/huwenfeng_2011/article/details/43416523 下面是下部分 C2S 1.当有客户端进行连接时根据Mina框架的模式首先调 ...

  2. oracle主要的动态视图与基表的对应关系

    动态视图 基表 GV$ACCESS x$ksuses,x$kglob,x$kgldp,x$kgllk GV$ACTIVE_INSTANCES x$ksimsi GV$ACTIVE_SESS_POOL_ ...

  3. http://elasticsearch-py.readthedocs.io/en/master/api.html

    API Documentation All the API calls map the raw REST api as closely as possible, including the disti ...

  4. 11、jQueryEasyUI的基本组件

    1.拖动的div <!--jquery 的主文件...--> <script type="text/javascript" src="../../js/ ...

  5. 剑指offer——75不用加减乘除做加法

    题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号.   题解: 使用位运算   class Solution { public: int Add(int num1 ...

  6. Educational Codeforces Round 56 D - Beautiful Graph

    ​题目大意: 在给定的一个图中(可能不连通) 给每个点赋值1.2.3 使得一条边上的两个端点点权相加为奇数 求方案数 一条满足条件的路径上的点权必为一奇一偶交替 偶数只有2 奇数有1.3 若位于1.3 ...

  7. Linux编程获取本机IP地址

    使用函数getifaddrs来枚举网卡IP,当中使用到的结构体例如以下所看到的: struct ifaddrs { struct ifaddrs *ifa_next; /* Next item in ...

  8. web 服务中上传文件大小控制

    参考文章:https://rensanning.iteye.com/blog/2388353 项目场景: Vue + Nginx + Java + Tomcat Nginx作为反向代理服务器,访问To ...

  9. 笔记:Python列表和元组

    列表 列表和字符串之间的转换 >>> li = list('hello') >>> li ['h', 'e', 'l', 'l', 'o'] >>> ...

  10. Tomcat爆破

    把输入的账户和密码包起来 选择第三个模式 第一个添加用户名 第二个添加: 第三个添加密码 选择编码格式 取消打钩