好久没用shiro了,以前学习时用了一下,过久了不用shiro的标签都不会用了,今天写一下来记录一下免得又得找半天
先把这用到shiro的html页面先写出来先
shiro 首先导入头部
<html xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
再来标签是权限判断是否拥有该权限
<div shiro:hasAnyRoles="7,1,9"><li><a href="javascript:;" id="shouhuo">售货单管理</a></div>
重点啊!!!!!!!
pom.xml必须得添加的jar包
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
页面使用标签也必须在ShiroConfig里面注入这个bean
@Bean
public ShiroDialect shiroDialect() {
return new ShiroDialect();
}
这样的话,HTMl页面才能通过标签跳转到授权逻辑
有个坑排一下,如果上面jar包版本号不为<version>2.0.0</version>
会报shiroDialect找不到AbstractProcessorDialect(注意)
js页面也写一下,貌似相差不多
<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>
1、介绍Shiro的标签guest标签 :验证当前用户是否为“访客”,即未认证(包含未记住)的用户。
<shiro:guest>
Hi there! Please <a href="login.jsp">Login</a> or <a href="signup.jsp">Signup</a> today!
</shiro:guest>
2、user标签 :认证通过或已记住的用户。
<shiro:user>
Welcome back John! Not John? Click <a href="login.jsp">here<a> to login.
</shiro:user>
3、authenticated标签 :已认证通过的用户。不包含已记住的用户,这是与user标签的区别所在。
<shiro:authenticated>
<a href="updateAccount.jsp">Update your contact information</a>.
</shiro:authenticated>
4、notAuthenticated标签 :未认证通过用户,与authenticated标签相对应。与guest标签的区别是,该标签包含已记住用户。
<shiro:notAuthenticated>
Please <a href="login.jsp">login</a> in order to update your credit card information.
</shiro:notAuthenticated>
5、principal 标签 :输出当前用户信息,通常为登录帐号信息。
Hello, <shiro:principal/>, how are you today?
6、hasRole标签 :验证当前用户是否属于该角色。
<shiro:hasRole name="administrator">
<a href="admin.jsp">Administer the system</a>
</shiro:hasRole>
7、lacksRole标签 :与hasRole标签逻辑相反,当用户不属于该角色时验证通过。
<shiro:lacksRole name="administrator">
Sorry, you are not allowed to administer the system.
</shiro:lacksRole>
8、hasAnyRole标签 :验证当前用户是否属于以下任意一个角色。
<shiro:hasAnyRoles name="developer, project manager, administrator">
You are either a developer, project manager, or administrator.
</shiro:lacksRole>
9、hasPermission标签 :验证当前用户是否拥有指定权限。
<shiro:hasPermission name="user:create">
<a href="createUser.jsp">Create a new User</a>
</shiro:hasPermission>
10、lacksPermission标签 :与hasPermission标签逻辑相反,当前用户没有制定权限时,验证通过。
<shiro:hasPermission name="user:create">
<a href="createUser.jsp">Create a new User</a>
</shiro:hasPermission>
差不多得了,可以去瞧瞧大佬写的
https://www.cnblogs.com/jifeng/p/4500410.html
附上以前写的小项目测试代码
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" xmlns:shiro="http://www.pollix.at/thymeleaf/shiro">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<title>ERP进销存</title>
<meta name="description" content="这是一个 index 页面" />
<meta name="keywords" content="index" />
<meta name="viewport"
content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" />
<meta name="renderer" content="webkit" />
<meta http-equiv="Cache-Control" content="no-siteapp" />
<link rel="icon" type="image/png" th:href="@{/i/favicon.png}" />
<link rel="apple-touch-icon-precomposed"
th:href="@{/i/app-icon72x72@2x.png}" />
<meta name="apple-mobile-web-app-title" content="Amaze UI" />
<link rel="stylesheet" th:href="@{/css/amazeui.min.css}" />
<link rel="stylesheet" th:href="@{/css/admin.css}" />
<script th:src="@{/js/jquery.min.js}"></script>
<script th:src="@{/js/app.js}"></script>
<link th:href="@{/css/bootstrap.css}" rel="stylesheet" />
</head>
<style>
h3 {
font-size: 20px;
}
ul li{
font-size: 15px;
}
</style>
<body>
<header class="am-topbar admin-header">
<div class="am-topbar-brand">
<img th:src="@{/i/logo.jpg}" />
</div>
<div class="am-collapse am-topbar-collapse" id="topbar-collapse">
<ul class="am-nav am-nav-pills am-topbar-nav admin-header-list">
<li class="am-dropdown tognzhi" data-am-dropdown="">
</li>
<li class="kuanjie" style="font-size: 20px;margin-right: 15px;"><a id="geren" th:onclick ="'javascript:gerens('+${peopleM.peopleid}+',\''+${peopleM.peoplename}+'\')'" th:text="个人中心"></a> <a href="javascript:;" id="tui">退 出</a> </li>
</ul>
</div>
</header>
<div class="am-cf admin-main">
<div class="nav-navicon admin-main admin-sidebar">
<div class="sideMenu"
style="color: #aeb2b7; margin: 10px 0 0 0;">
<span style="font-size: 20px;">欢迎<span th:text="${peopleM.roleP.rolename}"></span>:<span th:text="${peopleM.peoplename}"></span></span>
</div>
<div class="sideMenu">
<div shiro:hasAnyRoles="7,5,1,2,8,6">
<h3 class="">
<em></em> <a href="#">采购管理</a>
</h3>
<ul id="pp">
<div shiro:hasAnyRoles="7,1,8"><li><a href="javascript:;" id="xuqiu">需求单处理</a></li></div>
<div shiro:hasAnyRoles="7,1,8"><li><a href="javascript:;" id="baojia">报价单管理</a></li></div>
<div shiro:hasAnyRoles="7,8"><li><a href="javascript:;" id="caishen">审核欲采购单</a></li></div>
<div shiro:hasAnyRoles="7,5,8"><li><a href="javascript:;" id="caigou">采购单管理</a></li></div>
<div shiro:hasAnyRoles="7,2,8"><li><a href="javascript:;" id="caiorder">查看采购交易订单记录</a></li></div>
<div shiro:hasAnyRoles="7,6,8"><li><a href="javascript:;" id="quhuo">取货管理</a></li></div>
</ul>
</div>
<div shiro:hasAnyRoles="7,1,9,2">
<h3 class="">
<em></em> <a href="#"> 销售管理</a>
</h3>
<ul id="pp">
<div shiro:hasAnyRoles="7,1,9"><li><a href="javascript:;" id="shouhuo">售货单管理</a></li> </div>
<div shiro:hasAnyRoles="7,9"><li><a href="javascript:;" id="shoushen">审核欲售货单</a></li> </div>
<div shiro:hasAnyRoles="7,6,9"><li><a href="javascript:;" id="tihuo">提货管理</a></li> </div>
<div shiro:hasAnyRoles="7,2,9"><li><a href="javascript:;" id="shoujiao">查看售货交易订单记录</a></li> </div>
</ul>
</div>
<div shiro:hasAnyRoles="7,4,6">
<h3 class="">
<em></em> <a href="#">仓库管理</a>
</h3>
<ul id="pp">
<div shiro:hasAnyRoles="7,4"><li><a href="javascript:;" id="kucun">库存管理</a></li> </div>
<div shiro:hasAnyRoles="7,4"><li><a href="javascript:;" id="wuzhi">物质明细管理</a></li> </div>
<div shiro:hasAnyRoles="7,4"><li><a href="javascript:;" id="chuku">出库管理</a></li> </div>
<div shiro:hasAnyRoles="7,4"><li><a href="javascript:;" id="jiagong">加工管理</a></li> </div>
<div shiro:hasAnyRoles="7,4,6"><li><a href="javascript:;" id="yushu">运输管理</a></li> </div>
<div shiro:hasAnyRoles="7,4"><li><a href="javascript:;" id="ruku">入库单管理</a></li> </div>
</ul>
</div>
<div shiro:hasAnyRoles="7,1,10">
<h3 class="">
<em></em> <a href="#">客户管理</a>
</h3>
<ul id="pp">
<li><a href="javascript:;" class="ids" id="ids">客户信息管理</a></li>
</ul>
</div>
<div shiro:hasAnyRoles="7,2">
<h3 class="">
<em></em> <a href="#">财务管理</a>
</h3>
<ul id="pp">
<li><a href="javascript:;" id="fukuan">付款收据管理</a></li>
<li><a href="javascript:;" id="shoukuan">收款收据管理</a></li>
<!-- <li>近期金额统计</li>
<li>出入账汇率</li> -->
</ul>
</div>
<div shiro:hasAnyRoles="7,1,10">
<h3 class="">
<em></em> <a href="#" >供应商管理</a>
</h3>
<ul id="pp">
<li><a href="javascript:;" id="gong">供应商信息管理</a></li>
</ul>
</div>
<div shiro:hasAnyRoles="7,10">
<h3 class="">
<em></em> <a href="#">员工管理</a>
</h3>
<ul id="pp">
<li><a id="juese" href="javascript:;">角色管理</a></li>
<li><a id="jue" href="javascript:;">员工信息管理</a></li>
</ul>
</div>
</div>
<!-- sideMenu End -->
<script type="text/javascript">
jQuery(".sideMenu").slide({
titCell : "h3", //鼠标触发对象
targetCell : "ul", //与titCell一一对应,第n个titCell控制第n个targetCell的显示隐藏
effect : "slideDown", //targetCell下拉效果
delayTime : 300, //效果时间
triggerTime : 150, //鼠标延迟触发时间(默认150)
defaultPlay : false,//默认是否执行效果(默认true)
returnDefault : true
//鼠标从.sideMen移走后返回默认状态(默认false)
});
</script>
</div>
<div class=" admin-content">
<div class="daohang" ></div>
<div class="daohang">
<ul>
<li > <button type="button" id="niu" style="font-size: 18px;color:white" class="am-btn am-btn-default am-radius am-btn-xs"> </button></li>
<li > <button type="button" id="xie" style="font-size: 18px;color:white" class="am-btn am-btn-default am-radius am-btn-xs"></button></li>
<li ><button type="button" id="bi" style="font-size: 18px;color:white" class="am-btn am-btn-default am-radius am-btn-xs"></button></li>
</ul>
</div>
<div class="admin" >
<iframe id="ifrm" src="/peo/fengge" width="100%" height="1200px" scrolling="no" ></iframe>
</div>
</div>
</div>
</body>
<script th:src="@{/js/time2.js}"></script>
<script>
var niu=$("#niu");
var bi=$("#bi");
var xie=$("#xie");
var xuqiu=$("#xuqiu");//需求
var baojia=$("#baojia");//报价
var caishen=$("#caishen");//采购审核
var caigou=$("#caigou");//采购单
var caiorder=$("#caiorder");//采购记录
var quhuo=$("#quhuo");//取货
var i=$("#jue");//员工
var jue=$("#juese");//角色
var ifrm=$("#ifrm");//框架
var tui=$("#tui");//退出
var ids=$("#ids");//客户
var gong=$("#gong");//供应商
var fukuan=$("#fukuan");//付款
var shoukuan=$("#shoukuan");//收款
var shouhuo=$("#shouhuo");//售货
var shoushen=$("#shoushen");//审核
var tihuo=$("#tihuo");//提货
var shoujiao=$("#shoujiao");//售货交易
var kucun=$("#kucun");//库存
var wuzhi=$("#wuzhi");//物质
var chuku=$("#chuku");//出库
var jiagong=$("#jiagong");//加工
var yushu=$("#yushu");//运输
var ruku=$("#ruku");//入库
xuqiu.click(function(){
niu.text("采购管理");
bi.text("需求单管理");
xie.text("/");
ifrm.attr("src","/xq/list");
});
baojia.click(function(){
niu.text("采购管理");
bi.text("报价单管理");
xie.text("/");
ifrm.attr("src","/bao/list");
});
caishen.click(function(){
niu.text("采购管理");
bi.text("审核采购单");
xie.text("/");
ifrm.attr("src","/cg/Jlist");
});
caigou.click(function(){
niu.text("采购管理");
bi.text("采购单单管理");
xie.text("/");
ifrm.attr("src","/cg/list");
});
caiorder.click(function(){
niu.text("采购管理");
bi.text("采购交易记录管理");xie.text("/");
ifrm.attr("src","/or/list");
});
quhuo.click(function(){
niu.text("采购管理");
bi.text("取货单管理");xie.text("/");
ifrm.attr("src","/qh/list");
});
/* 仓库模块 */
kucun.click(function(){
niu.text("仓库管理");
bi.text("库存管理");xie.text("/");
ifrm.attr("src","/items/lists");
});
wuzhi.click(function(){
niu.text("仓库管理");
bi.text("物质详情管理");xie.text("/");
ifrm.attr("src","/wu/lists");
});
chuku.click(function(){
niu.text("仓库管理");
bi.text("出库管理");xie.text("/");
ifrm.attr("src","/os/list");
});
jiagong.click(function(){
niu.text("仓库管理");
bi.text("加工单管理");xie.text("/");
ifrm.attr("src","/jg/list");
});
yushu.click(function(){
niu.text("仓库管理");
bi.text("运输管理");xie.text("/");
ifrm.attr("src","/ys/list");
});
ruku.click(function(){
niu.text("仓库管理");
bi.text("入库管理");xie.text("/");
ifrm.attr("src","/rk/list");
});
/* 员工管理*/
i.click(function(){
niu.text("员工管理");
bi.text("员工信息管理");xie.text("/");
ifrm.attr("src","/peo/list");
});
jue.click(function(){
niu.text("员工管理");
bi.text("角色管理");xie.text("/");
ifrm.attr("src","/role/list");
});
/* 供应商管理*/
gong.click(function(){
niu.text("供应商管理");
bi.text("供应商信息管理");xie.text("/");
ifrm.attr("src","/provider/list");
});
/* 客户模块 */
ids.click(function(){
niu.text("客户管理");
bi.text("客户信息管理");xie.text("/");
ifrm.attr("src","/customer/list");
});
/* 财务模块 */
fukuan.click(function(){
niu.text("财务管理");
bi.text("付款收据管理");xie.text("/");
ifrm.attr("src","/scoder/list");
});
shoukuan.click(function(){
niu.text("财务管理");
bi.text("收款收据管理");xie.text("/");
ifrm.attr("src","/rcoder/list");
});
/* 售货模块 */
shouhuo.click(function(){
niu.text("售货管理");
bi.text("售货订单管理");xie.text("/");
ifrm.attr("src","/xs/list");
});
shoushen.click(function(){
niu.text("售货管理");
bi.text("审核售货订单");xie.text("/");
ifrm.attr("src","/xs/lists");
});
tihuo.click(function(){
niu.text("售货管理");
bi.text("提货管理");xie.text("/");
ifrm.attr("src","/th/list");
});
shoujiao.click(function(){
niu.text("售货管理");
bi.text("售货交易订单管理");xie.text("/");
ifrm.attr("src","/xsor/list");
});
/* 个人主页跳转 */
function gerens(pojo,names){
niu.text("个人主页");xie.text("/");
bi.text(names+"个人主页");
ifrm.attr("src","/test/geren?pojo="+pojo);
}
/*退出传值 */
tui.click(function(){
location.href="/login";
})
</script>
</html>