使用shiro框架进行权限的管理

1.shiro框架的角色管理

1.1 在用户验证成功以后,可以在jsp页面中使用shiro的标签进行角色的验证

首先,在jsp页面中需要导入shiro需要的uri

<%@taglib prefix="shiro" uri="http://shiro.apache.org/tags"%>

导入该标签以后。就可以使用shiro的标签

<shiro:guest>
亲,请<a href="login.jsp">登录</a>
	</shiro:guest>
	<shiro:user>
		<shiro:principal>

		</shiro:principal>
		&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a
			href="logout.do">退出</a>
	</shiro:user>
	<br>
<button id="ss" >系统管理</button>
	<c:forEach items="${rolelist }" var="role">
		<shiro:hasRole name="${role.roleName }">
			<a href="Login/role${role.roleId }.do">${role.roleName }管理</a>
		</shiro:hasRole>

<script type="text/javascript">

	$("#ss").click(function () {
		$.post("Login/role8.do",{},function (data){
			
		})
	})

	
</script>
	</c:forEach>

	<hr>
	<div align="center">
		<shiro:hasPermission name="user:create">
			<a href="#">增加</a>
		</shiro:hasPermission>
		<table border="1" style="border-collapse: collapse;">
			<tr>
				<th>用户ID</th>
				<th>姓名</th>
				<th>年龄</th>
				<th>性别</th>
				<th>爱好</th>
				<th>用户名</th>
				<th>创建时间</th>
				<th>操作</th>
			</tr>

			<c:forEach items="${pageResult.dataList}" var="user">
				<tr>
					<td><input type="checkbox" name="id" value="${user.userId }" />${user.userId }</td>
					<td>${user.name }</td>
					<td>${user.age }</td>
					<td>${user.sex }</td>
					<td>${user.hobby }</td>
					<td>${user.userName }</td>
					<td>${user.createTime }</td>
					<td><shiro:hasPermission name="user:update">
							<button>更新</button>
						</shiro:hasPermission> <shiro:hasPermission name="user:delete">
							<button>删除</button>
						</shiro:hasPermission></td>
			</c:forEach>

		</table>
	</div>

其中shiro:guest 标签是可以匿名登录
shiro:user标签和shiro:principal一般是一起使用,表示的当前登录进来的用户是谁。
<shiro:hasRole name="">标签表示该用户拥有什么角色,如果该用户拥有name中的角色,则显示标签后面的所有代码。
<shiro:hasPermission name=“user:create”> 标签和上面的hasrole标签类似。

1.2 在java代码中使用注解的方式来管理角色权限的访问。

首先,需要在springMVC的配置文件中添加启用注解的配置

<bean
		class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
		depends-on="lifecycleBeanPostProcessor" />

现在就可以在java代码中使用shiro的注解来管理权限的访问了。

@RequestMapping("/role8.do")
	@RequiresRoles(value= {"系统"})
	public  String role8() {
		return "role8";
	}

这段代码可以看出,当页面访问这个方法的时候,必须是具有“系统”这个角色的时候才能访问,否则会抛出一个org.apache.shiro.authz.UnauthorizedException异常,可以在web.xml文件中捕获这个异常并且跳转一个错误的jsp页面

<error-page>
		<exception-type>org.apache.shiro.authz.UnauthorizedException</exception-type>
		<location>/WEB-INF/view/fail.jsp</location>
	</error-page>
1.3 给用户配置角色和权限
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
		String username = (String) principals.getPrimaryPrincipal();
		List<Role> rolelist = roleservice.findRoleByUserName(username);
		Set<String> roles = new HashSet<>();
		Set<String> permission = new HashSet<>();
		for (Role role : rolelist) {
			roles.add(role.getRoleName());
			List<Permission> permissionlist = permissionMapper.findPermissionByRoleId(role.getRoleId());
			for (Permission permission1 : permissionlist) {
				permission.add(permission1.getPermissionName());
			}
		}
		SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
		info.addStringPermissions(permission);
		return info;
	}

在MyRealm中又两个重写的方法。doGetAuthorizationInfo()方法是授权方法,就是在jsp页面中又shiro的hasrole之类的标签时,才会调用该方法来查询该用户拥有哪些角色和权限。

至此,shiro对权限的控制和访问就已经能使用了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值