SSM项目实战之十六:shiro实现授权

授权管理

  • 前言
  • 获取用户对应的权限
    • IUserService接口
    • UserServiceImpl
    • RoleMapper接口
    • RoleMapper映射文件
    • 授权方法
  • springmvc.xml
  • 测试数据准备

前言

上篇文章实现类基于Shiro的认证操作,本文来实现下授权操作。

获取用户对应的权限

IUserService接口

/**
 * 根据用户编号获取对应的权限信息
 * @param userId
 * @return
 */
public List<Role> queryRoleByUserId(int userId);

UserServiceImpl

@Override
public List<Role> queryRoleByUserId(int userId) {
    return roleMapper.queryRoleByUserId(userId);
}

RoleMapper接口

List<Role> queryRoleByUserId(int userId);

RoleMapper映射文件

<select id="queryRoleByUserId" resultMap="BaseResultMap">
    select * 
    from t_role t1 
    where t1.role_id in (
        select role_id from t_user_role where user_id = #{id}
    )
</select>

授权方法

修改MyRealm中的授权方法

/**
 * 授权的方法
 */
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
    // 获取认证的信息
    User user = (User) principals.getPrimaryPrincipal();
    // 获取登录用户对应的权限
    List<Role> roles = userService.queryRoleByUserId(user.getUserId());
    SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
    for (Role role : roles) {
        // 将用户具有的角色保存到SimpleAuthorizationInfo对象中
        info.addRole(role.getRoleName());
    }
    return info;
}

springmvc.xml

    
	<aop:config proxy-target-class="true"/>
		<bean
		    class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
		    <property name="securityManager" ref="securityManager" />
	bean>
	
<bean
    class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
    <property name="exceptionMappings">
        <props> 
            <prop key="org.apache.shiro.authz.UnauthorizedException">redirect:/failedprop>
            <prop key="org.apache.shiro.authz.UnauthenticatedException">redirect:/loginprop> 
             
            
        props>
    property>
bean>

测试数据准备

创建一个账号分配对应的角色用来测试。
SSM项目实战之十六:shiro实现授权_第1张图片
SSM项目实战之十六:shiro实现授权_第2张图片

// 当前登录用户需要"管理员角色才能访问"
@RequiresRoles("管理员")
@RequestMapping("/queryPage")
public String queryPage(UserDto dto,Model model){
    PageInfo<User> pageModel = userService.queryPage(dto);
    model.addAttribute("pageModel", pageModel);
    return "user/user";
}

创建访问失败的页面failed.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<html>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档title>
<link href="css/style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.js">script>

<script language="javascript">
    $(function() {
        $('.error').css({
            'position' : 'absolute',
            'left' : ($(window).width() - 490) / 2
        });
        $(window).resize(function() {
            $('.error').css({
                'position' : 'absolute',
                'left' : ($(window).width() - 490) / 2
            });
        })
    });
script>
head>
<body style="background: #edf6fa;">
    <div class="place">
        <span>位置:span>
        <ul class="placeul">
            <li><a href="#">首页a>li>
            <li><a href="#">没有访问权限提示a>li>
        ul>
    div>
    <div class="error">
        <h2>非常遗憾,您没有权限访问该页面!h2>
        <p>看到这个提示,就自认倒霉吧!p>
        <div class="reindex">
            <a href="/main" target="_parent">返回首页a>
        div>
    div>
    <div style="display: none">
        <script src='http://v7.cnzz.com/stat.php?id=155540&web_id=155540'
            language='JavaScript' charset='gb2312'>script>
    div>
body>
html>

用没有“管理员”角色的访问测试
SSM项目实战之十六:shiro实现授权_第3张图片

你可能感兴趣的:(项目实战,SSM项目实战)