您的位置:首页 > 其它

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

2019-01-03 20:03 218 查看

1.shir 4000 o框架的角色管理

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:gues 20000 t 标签是可以匿名登录
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对权限的控制和访问就已经能使用了。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: