• 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、代码手动授权

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

  • 相关阅读:
    IEE754算法
    EQ控制卡二次开发(火凤凰、蓝精灵异步单双色控制卡卡)
    康耐德C2000开关量采集
    初次了解MVC框架模式
    jQuery常用事件
    jQuery做一个小小的移动图片的位置
    jQuery关于复选框的基本小功能
    WebRequest类: WebRequest类是.NET.Framework的请求/响应模型的抽象基类,用于访问Internet数据
    .net与三层的异同
    mvc基础
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13749636.html
Copyright © 2020-2023  润新知