zoukankan      html  css  js  c++  java
  • Shiro:授权的相关实现

    Shiro:授权的相关实现

    一、使用Shiro过滤器实现授权

    设置好授权拦截跳转的请求地址

        /**
         * 创建ShiroFilterFactoryBean
         */
        @Bean
        public ShiroFilterFactoryBean getShiroFilterFactoryBean(@Qualifier("securityManager") DefaultWebSecurityManager securityManager) {
            ShiroFilterFactoryBean shiroFilterFactoryBean=new ShiroFilterFactoryBean();
            //设置安全管理器
            shiroFilterFactoryBean.setSecurityManager(securityManager);
            
            //添加Shiro内置过滤器
            /**
             * Shiro内置过滤器,可以实现权限相关的拦截器
             * 常用的过滤器:
             *     anon:无需认证(登录)可以访问
             *     authc:必须认证才可以访问
             *  user:如果使用rememberMe的功能可以直接访问
             *  perms:该资源必须得到资源权限才可以访问
             *  role:该资源必须得到角色权限才可以访问
             */    
            Map<String, String> filterMap= new LinkedHashMap<String,String>();
            
            
            //设置拦截后跳转的请求路径
            shiroFilterFactoryBean.setLoginUrl("/user/badRequest");
            //设置未授权提示的页面
            shiroFilterFactoryBean.setUnauthorizedUrl("/user/badRequest");
            shiroFilterFactoryBean.setFilterChainDefinitionMap(filterMap);
            return shiroFilterFactoryBean;
        }

    再使用 filterMap 去放对应的拦截即可,例如 filterMap.put("/**", "anon")

    上面是认证的,如果需要授权的,相应的多给一个任意的授权字符串如 filterMap.put("/user/add", "perms[user:add]")

    授权逻辑编写的位置

        /**
         * 执行授权逻辑
         */
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
            System.out.println("开始执行Shiro的授权方法...");
            
            //给资源进行授权
            SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
            
            //添加资源的授权字符串
            info.addStringPermission("user:add");
            
            return null;
        }

    授权字符串和之前的字符串对应

    补充

        /**
         * 执行认证逻辑
         */
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken arg0) throws AuthenticationException {
            System.out.println("开始执行Shiro的认证方法...");        
            //编写Shiro判断逻辑,判断用户名和密码
            //判断用户名是否存在
            UsernamePasswordToken token=(UsernamePasswordToken)arg0;
            User user = userMapper.findByUsername(token.getUsername());
            if(user==null)
                return null;
            //判断密码是否正确,参数一为认证的实体
            return new SimpleAuthenticationInfo(user,user.getPassword(),"");
        }

    在执行认证时的SimpleAuthenticationInfo第一个传参可以用来获取当前用户

    /**
         * 执行授权逻辑
         */
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
            System.out.println("开始执行Shiro的授权方法...");
            
            //给资源进行授权
            SimpleAuthorizationInfo info= new SimpleAuthorizationInfo();
            
            //添加资源的授权字符串
            info.addStringPermission("user:register");
            
            //获取当前的登录用户
            User user=(User)SecurityUtils.getSubject().getPrincipal();
            
            
            return null;
        }
  • 相关阅读:
    jQuery自学笔记(四):jQuery DOM节点操作
    jQuery自学笔记(三):jQuery动画效果
    jQuery自学笔记(二):jQuery选择器
    面试记录与复盘总结
    wh-研发功能复盘
    st项目-要素标记功能的实现以及经验总结
    ST项目经验总结2
    S台项目记录-1
    统计模型项目开发经验汇总
    开发规范
  • 原文地址:https://www.cnblogs.com/it-taosir/p/9977303.html
Copyright © 2011-2022 走看看