第十九章 动态URL权限控制——《跟我学Shiro》

目录贴: 跟我学Shiro目录贴

用过Spring Security的朋友应该比较熟悉对URL进行全局的权限控制,即访问URL时进行权限匹配;如果没有权限直接跳到相应的错误页面。Shiro也支持类似的机制,不过需要稍微改造下来满足实际需求。不过在Shiro中,更多的是通过AOP进行分散的权限控制,即方法级别的;而通过URL进行权限控制是一种集中的权限控制。本章将介绍如何在Shiro中完成动态URL权限控制。

本章代码基于《第十六章 综合实例》,请先了解相关数据模型及基本流程后再学习本章。

表及数据SQL

请运行shiro-example-chapter19/sql/ shiro-schema.sql 表结构

请运行shiro-example-chapter19/sql/ shiro-schema.sql 数据

实体

具体请参考com.github.zhangkaitao.shiro.chapter19包下的实体。

Java代码 收藏代码
public class UrlFilter implements Serializable {
private Long id;
private String name; //url名称/描述
private String url; //地址
private String roles; //所需要的角色,可省略
private String permissions; //所需要的权限,可省略
}
表示拦截的URL和角色/权限之间的关系,多个角色/权限之间通过逗号分隔,此处还可以扩展其他的关系,另外可以加如available属性表示是否开启该拦截。

DAO

具体请参考com.github.zhangkaitao.shiro.chapter19.dao包下的DAO接口及实现。

Service

具体请参考com.github.zhangkaitao.shiro.chapter19.service包下的Service接口及实现。

Java代码 收藏代码
public interface UrlFilterService {
public UrlFilter createUrlFilter(UrlFilter urlFilter);
public UrlFilter updateUrlFilter(UrlFilter urlFilter);
public void deleteUrlFilter(Long urlFilterId);
public UrlFilter findOne(Long urlFilterId);
public List findAll();
}
基本的URL拦截的增删改查实现。

Java代码 收藏代码
@Service
public class UrlFilterServiceImpl implements UrlFilterService {
@Autowired
private ShiroFilerChainManager shiroFilerChainManager;

@Override  
public UrlFilter createUrlFilter(UrlFilter urlFilter) {  
    urlFilterDao.createUrlFilter(urlFilter);  
    initFilterChain();  
    return urlFilter;  
}  
//其他方法请参考源码  
@PostConstruct  
public void initFilterChain() {  
    shiroFilerChainManager.initFilterChains(findAll());  
}  

}
UrlFilterServiceImpl在进行新增、修改、删除时会调用initFilterChain来重新初始化Shiro的URL拦截器链,即同步数据库中的URL拦截器定义到Shiro中。此处也要注意如果直接修改数据库是不会起作用的,因为只要调用这几个Service方法时才同步。另外当容器启动时会自动回调initFilterChain来完成容器启动后的URL拦截器的注册。

ShiroFilerChainManager

Java代码 收藏代码
@Service
public class ShiroFilerChainManager {
@Autowired private DefaultFilterChainManager filterChainManager;
private Map

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值