跳到主要内容

Shiro 动态 URL

动态 URL 权限控制

用过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 包下的实体。

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 接口及实现。

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<UrlFilter> findAll();