zoukankan      html  css  js  c++  java
  • 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、代码手动授权

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

  • 相关阅读:
    windows 7 自定义sendTo
    EntLib5.0 DAAB(Data Access Application Block),数据访问程序块 简单示例
    C#命令行重定向
    “Java decompiler” http://java.decompiler.free.fr/
    HtmlToPdf HTML转PDF工具
    百慕大三角
    OpenAL Installer for Windows
    April 2006 DirectX SDK is now available
    GDC2006
    感慨啊,我国的电子竞技!
  • 原文地址:https://www.cnblogs.com/zhai1997/p/13749636.html
Copyright © 2011-2022 走看看