复习步骤9-获取权限数据CustomRealm提供subject桥梁,集成spring -shiro XML配置文件权限--自定义和非自定义授权过滤器

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/xiangshuai198807/article/details/88865074

项目目录结构

       非自定义授权过滤器   

         spring.xml

/testrole1=roles["admin"] <!-- 要有admin 角色才可以访问 /testrole url-->

                /testrole2=roles["admin","sjr"] <!-- 要有admin sjr 角色才可以访问 /testrole2 url 未测-->

                /testPerms1=perms["user:select"] <!-- 要有user:select 权限 才可以访问 /testPerms1 url-->

                /testPerms2=perms["user:select","user:update","user:add"] <!-- 要同时有user:select,user:update,user:add 权限 才可以访问 /testPerms2 url-->

 

            UserController.java中加

//produces = "application/json; charset=utf-8" 解决@ResponseBody 返回中文乱码

扫描二维码关注公众号,回复: 5690509 查看本文章

    

     /*配置文件方式 配置授权--非自定义授权过滤器  测试账号,一般为 刘少峰 123456 登录(数据存的密码事 123456 yan 加密的) */

          // 配置文件方式 配置授权--非自定义授权过滤器   spring.xml shiro  /testrole1=roles["admin"] --要有admin 角色才可以访问 /testrole1 url,登录之后有admin角色 请求 /testrole1 就可以进来了

     @RequestMapping(value="/testrole1",method=RequestMethod.GET,

            produces = "application/json; charset=utf-8")

     @ResponseBody

     public String testrole1(){

        return "admin角色,登录成功";

     }

        // 配置文件方式 配置授权--非自定义授权过滤器   spring.xml shiro /testPerms1=perms["user:select"]  --要有user:select 权限 才可以访问 /testPerms1 url,登录之后有user:select角色 请求 /testrole1 就可以进来了

     @RequestMapping(value="/testPerms1",method=RequestMethod.GET,

            produces = "application/json; charset=utf-8")

     @ResponseBody

     public String testPerms1(){

        return "user:select 权限,登录成功";

     }

    

    

         // 配置文件方式 配置授权--非自定义授权过滤器   spring.xml shiro /testPerms2=perms["user:select","user:update","user:add"]   --要同时具有user:selectuser:updateuser:add 权限 才可以访问 /testPerms2 url,登录之后 请求 /testrole2 就可以进来了

     @RequestMapping(value="/testPerms2",method=RequestMethod.GET,

            produces = "application/json; charset=utf-8")

     @ResponseBody

     public String testPerms2(){

        return "user:selectuser:updateuser:add 权限,登录成功";

     }

    

  先用 刘少峰 123456 登录

然后再 /testPerms1 /testPerms2/testrole1 测试

 

 

 

 

          //自 定义角色权限 过滤器

     自定义角色权限过滤器类

RolesOrFilter.java

 

    package com.xiangshuai.filter;

 

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

 

import org.apache.shiro.subject.Subject;

import org.apache.shiro.web.filter.authz.AuthorizationFilter;

 

/**

 * maven 项目- 文件位置:E:\学习文档子目录压缩\框架\shiro\shiro安全框架入门\复习步骤9-获取权限数据CustomRealm提供subject桥梁,集成spring -shiro  XML配置文件权限--自定义和非自定义授权过滤器

 * 我的网盘/我的笔记/学习文档子目录压缩\框架\shiro\shiro安全框架入门\复习步骤9-获取权限数据CustomRealm提供subject桥梁,集成spring -shiro  XML配置文件权限--自定义和非自定义授权过滤器

 * 自定义filter做权限检查  rolesOR 拦截,只要 含有其中任意一个roles角色,就可以访问

 * @author lqx

 *AuthorizationFilter这个抽象类也是继承自AccessControlFilter,(其他过滤器百度),他是用于处理登陆后的权限检查

 */

public class RolesOrFilter extends AuthorizationFilter{

 

    @Override

    protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue)

           throws Exception {

       Subject subject = getSubject(request, response);//filter的父类 提供了用getSubject获得主体的方法

       String[] roles=(String[]) mappedValue;//这个参数就是由 拦截器定义的 比如浏览器请求 testRoleOr1 时在 shirospring.xml中定义的rolesOR["sjr","admin"] ,那么这个mappedValue 就是["sjr","admin"]

       if(roles==null || roles.length==0){//不需要权限

           return true;

       }

       for (String role : roles) {

           if(subject.hasRole(role)){//如果subject 含有访问目标资源的权限,那么chain拦截器链就放行

              return true;

           }

       }

 

       return false;

    }

 

}

 

 

 

 

    spring.xml

<!-- 定义RolesOrFilter,让spring IOC -->

      <bean class="com.xiangshuai.filter.RolesOrFilter" id="rolesOrFilter"/>

 

       

         

 

 

   UserController.java中加

// 配置文件方式 配置授权--自定义授权过滤器  自定义  rolesOR 拦截,用户登录之后 只要 含有其中任意一个roles角色,就可以访问 spring.xml shiro /testRoleOr1=rolesOR["sjr","admin"]  /testRoleOr2=rolesOR["hehehe","test1"]-

     @RequestMapping(value="/testRoleOr1",method=RequestMethod.GET,

            produces = "application/json; charset=utf-8")

     @ResponseBody

     public String testRoleOr1(){//刘少峰 123456 含有 admin权限,所以可以访问此资源--/testRoleOr1=rolesOR["sjr","admin"]

        return "没有sjy有权限,但有admin权限,登录成功";

     }

    

     @RequestMapping(value="/testRoleOr2",method=RequestMethod.GET,

            produces = "application/json; charset=utf-8")

     @ResponseBody

     public String testRoleOr2(){//刘少峰 123456 不含有 hehehe权限,也不含有test1,所以不可以访问此资源-/testRoleOr2=rolesOR["hehehe","test1"]

        return "既没有heheh 权限,也没有哦test1权限,";

     }

 

 

     页面请求

 

 

 

 

    

 

猜你喜欢

转载自blog.csdn.net/xiangshuai198807/article/details/88865074