shiro:授权管理

1、概念

(1)基本概念

用户登录成功之后,要进行响应的操作就需要有对应的权限;在进行操作之前对权限进行检查一授权

权限控制通常有两类做法:

  • 不同身份的用户登录,我们现在不同的操作菜单(没有权限的菜单不现实)
  • 对所有用户显示所有菜单,当用户点击菜单以后再验证当前用户是否有此权限,如果没有则提示权限不足

2、HTML授权

(1)定义添加页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>aAdd</title>
</head>
<body>
   <h3>添加学生</h3>
</body>
</html>

(2)书写controller,访问添加页面:

 @RequestMapping("/sAdd.html")
    public String sAdd(){
        return "sAdd";
    }

(3)正常登录获取权限:管理员登录

(4)非正常登录访问添加页面:直接访问

3、过滤器授权

(1)定义过滤器

@Bean//过滤器
    public ShiroFilterFactoryBean shiroFilterFactoryBean(DefaultSecurityManager securityManager) {
        ShiroFilterFactoryBean filter = new ShiroFilterFactoryBean();
        //过滤器是shiro执行权限的核心,进行认证和授权是需要SecurityManager的
        filter.setSecurityManager(securityManager);
        //设置shiro的拦截规则
        Map<String, String> filterMap = new HashMap<>();
        //user:使用remberme的用户可访问
        //perms:对应权限可访问
        //role:对应的角色才能访问
        filterMap.put("/", "anon");//anon表示不拦截(匿名用户可访问)
        filterMap.put("/login.html", "anon");
        filterMap.put("/regist.html", "anon");
        filterMap.put("/user/login", "anon");
        filterMap.put("/user/regist", "anon");
        filterMap.put("/static/**", "anon");
        filterMap.put("/layui/**", "anon");
        filterMap.put("/static/layui/css", "anon");
        filterMap.put("/static/layui/js", "anon");
        filterMap.put("/index.html", "anon");
        filterMap.put("/test.html", "anon");
        filterMap.put("/**", "authc");//authc表示认证用户可访问
        filterMap.put("/s_aAdd.html", "perms[man_add]");
        filter.setFilterChainDefinitionMap(filterMap);
        filter.setLoginUrl("/login.html");
        //设置未授权访问的页面
        filter.setUnauthorizedUrl("/login.html");
        return filter;
    }

在以上代码中添加对s_aAdd.html的过滤,并添加权限

filterMap.put("/s_aAdd.html", "perms[man_add]");

如果直接访问s_aAdd.html下的添加页面,是不能访问成功的

4、注解方式

(1)在配置类中定义shiro对注解的支持

@Bean//配置注解支持
    public DefaultAdvisorAutoProxyCreator getDefaultAdvisorAutoProxyCreator(){
        DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator=new DefaultAdvisorAutoProxyCreator();
        defaultAdvisorAutoProxyCreator.setProxyTargetClass(true);
        return  defaultAdvisorAutoProxyCreator;
    }
    @Bean//配置注解支持
    public AuthorizationAttributeSourceAdvisor getAuthorizationAttributeSourceAdvisor
            (DefaultWebSecurityManager defaultMebsecurityNlanager) {
        AuthorizationAttributeSourceAdvisor advisor = new AuthorizationAttributeSourceAdvisor();
        advisor.setSecurityManager(defaultMebsecurityNlanager);
        return advisor;
    }

(2)在controller中定义注解

   @RequiresPermissions("man_add")
    @RequestMapping("/sAdd.html")
    public String sAdd(){
        return "sAdd";
    }

(3)测试(不进行登录直接访问添加页面)

5、代码手动授权

代码的方式获取到用户的权限,如果用户拥有相应的权限就执行响应的操作,否则执行其他操作

原文地址:https://www.cnblogs.com/zhai1997/p/13749636.html