首页 > 编程 > Java > 正文

SpringBoot Shiro授权实现过程解析

2019-11-26 08:21:39
字体:
来源:转载
供稿:网友

这篇文章主要介绍了SpringBoot 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;  }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表