shiro动态的菜单项加载

shiro动态的菜单项加载

ChainDefinitionSectionMetaSource,本质就是对所有角色菜单遍历,即角色菜单的双重遍历,实现菜单和角色的对应关系

package com.houbank.incoming.web.shrio;

import com.alibaba.dubbo.config.annotation.Reference;

import com.houbank.basic.util.response.BaseResponse;

import com.houbank.incoming.api.FinancialSalesFuncFacade;

import com.houbank.incoming.api.FinancialSalesRoleFacade;

import com.houbank.incoming.model.condition.FinancialSalesRoleCondition;

import com.houbank.incoming.model.condition.FinancialSalesUserRoleCondition;

import com.houbank.incoming.model.domain.FinancialSalesFuncRole;

import com.houbank.incoming.model.domain.FinancialSalesRole;

import com.houbank.incoming.web.controller.FinancialSalesUserController;

import org.apache.shiro.config.Ini;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.FactoryBean;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.data.redis.core.RedisTemplate;

import java.util.*;

//import com.houbank.incoming.web.util.UserDetailsSessionService;

//import core.apps.rbac.login.UserDetailsSessionService;

public class ChainDefinitionSectionMetaSource implements FactoryBean<Ini.Section>{

    private String filterChainDefinitions;

    

//    @Autowired(required=false)

//    private UserDetailsSessionService userDetailsSessionService;

    

//    @Autowired(required=false)

//    private DBKeyHelp dBKeyHelp;

//

//    @Autowired(required=false)

//    private DBServerHelp dBServerHelp;

//

    @Autowired(required=false)

    private RedisTemplate redisTemplate;

    @Reference

    private FinancialSalesFuncFacade financialSalesFuncFacade;

    @Reference

    private FinancialSalesRoleFacade financialSalesRoleFacade;

    

    /**

     * 默认premission字符串

     */

    public static final String PREMISSION_STRING="perms[\"{0}\"]";

    

   //泛型用类名加<>传入 ,构造参数用类名加()

    public Ini.Section getObject() throws BeansException {

        //获取所有Resource

    Map<String,String> a = new HashMap<String,String>();

    try {

//dBKeyHelp.getSerialNo("LC", "1010", "");

//    dBServerHelp.getServerNo("10.100.84.38", "SUPT", "OD", "11");

//    DBKeyHelpBo dBKeyHelpBo= new DBKeyHelpBo();

//    dBKeyHelpBo.setIntypecode("OD");

//    dBKeyHelpBo.setInbranchid("0000");

//    dBKeyHelpBo.setsDateFmt("yy");

//    dBKeyHelpBo.setsNoFmt("0000000000");//000000

//    dBKeyHelpBo.setToday(new Date());

//    dBKeyHelpBo.setNum(100);

//    String  serialNo= serialContext.getSerialNo(dBKeyHelpBo);

//    DBServerHelpBo dBServerHelpBo= new DBServerHelpBo();

//    dBServerHelpBo.setIpStr("10.100.84.38");

//    dBServerHelpBo.setServerType("SUPT");

//    dBServerHelpBo.setBussType("OD");

//    dBServerHelpBo.setBatchSaveSize("11");

//    dBServerHelpBo.setToday(new Date());

//    dBServerHelpBo.setsDateFmt("yyMMddHHmmss");

//    dBServerHelpBo.setsNoFmt("00000");

//    dBServerHelpBo.setNum(100);

//    String serverSerialNo= serialContext.getSerialNo(dBServerHelpBo);

//    System.out.println("serialNo=="+serialNo+"======serverSerialNo===="+serverSerialNo);

//    serialNo= serialContext.getSerialNo(dBKeyHelpBo);

//    serverSerialNo= serialContext.getSerialNo(dBServerHelpBo);

//    System.out.println("serialNo=="+serialNo+"======serverSerialNo===="+serverSerialNo);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

//        int n=0;

//        RedisLock lock = new RedisLock(redisTemplate, "quarz_key", 10000, 20000);

//        try {

//            if(lock.lock()) {

//                //需要加锁的代码

//                n++;

//                System.out.println("=========reirs======="+n);

//                System.out.println("=========reirs======="+lock.getLockKey());

//                System.out.println("=========reirs======="+lock.get("quarz_key_lock"));

//

//            }

//        }catch (InterruptedException e) {

//        e.printStackTrace();

//    }finally {

//        lock.unlock();

//    }

//        financialSalesUserController.getweixinBaseInfoList();

        return  getSectionService(filterChainDefinitions) ;

    }

public Ini.Section getSectionService(String filterChainDefinitions) {

List<FinancialSalesFuncRole> list =new ArrayList<FinancialSalesFuncRole>();

        List<FinancialSalesFuncRole> listAll =new ArrayList<FinancialSalesFuncRole>();

//        list=this.baseService.findAll(RoleSkillBTEntity.class);

        FinancialSalesUserRoleCondition financialSalesRoleCondition =new FinancialSalesUserRoleCondition();

        list =  financialSalesRoleFacade.selectAll();

//        String sql = "SELECT b.*,s.URL from s_rbac_roleskillb  b ,s_rbac_skill s WHERE b.SKILLID=s.SKILLID";

        List<Map> branchArr = financialSalesRoleFacade.getRoleFuncUrl(financialSalesRoleCondition);//this.baseService.queryForJDBCList(sql);

//        SkillMenuEntity item = new SkillMenuEntity();

//        List<SkillMenuEntity> items =this.baseService.findAll(SkillMenuEntity.class);

//        SkillInfoEntity opmMenuitemlimit = new SkillInfoEntity();

//        List<SkillInfoEntity> opmMenuitemlimits =this.baseService.findAll(SkillInfoEntity.class);//opmMenuitemlimitService.getOpmMenuitemlimit(opmMenuitemlimit);

//        List<SkillMenuEntity> itemsb =new ArrayList<SkillMenuEntity>();

//        List<SkillInfoEntity> opmMenuitemlimitsb =new ArrayList<SkillInfoEntity>();

        Set<String> itms= new HashSet<String>();

        Set<String> itmls= new HashSet<String>();

        for (Iterator<Map> it1 = branchArr.iterator(); it1.hasNext();) {

        Map resource = (Map)it1.next();////角色菜单信息

//        if("1".equals(resource.get("validFlag"))){

        itmls.add(resource.get("funcId")+"");

//        }

        }

//        for(String im :itmls){//字符串转化为实体

//        SkillInfoEntity o = new SkillInfoEntity();

//        o.setSkillId(im);

//        opmMenuitemlimitsb.add(o);

//        }

        Ini ini = new Ini();

        ini.load(filterChainDefinitions);

        Ini.Section section = ini.getSection(Ini.DEFAULT_SECTION_NAME);

        Map<String,Set<String>> mapr = new HashMap<String,Set<String>>();

        Set<String> roleIds=null;

        Set<String> mlroleIds=null;

        if(list!=null&&list.size()>0){

//双重循环讲角色和对应的菜单对应

        for(int i = 0; i < branchArr.size(); i++){//遍历角色菜单

        Map r = (Map)branchArr.get(i);

        roleIds=new HashSet<String>();

            mlroleIds=new HashSet<String>();

             for (Iterator<Map> it = branchArr.iterator(); it.hasNext();) {//遍历角色菜单

            Map resource = it.next();

        if(r.get("funcId").equals(resource.get("funcId"))){

            //如果不为空值添加到section中

//            if("1".equals(resource.get("validFlag"))) {

            roleIds.add(resource.get("roleId")+"");

//            }

             }

        }

            if(!"".equals(r.get("url")) && null!=r.get("url")){

         mapr.put(r.get("url")+"", roleIds);

             }

        }

        }

        StringBuffer au=null;

        String st="";

//匹配到的转化为要求格式

        for(Map.Entry<String, Set<String>> en:mapr.entrySet()){

        au = new StringBuffer();

        au.append("authc,role[");

        for(String a :en.getValue()){

        au.append("\""+a+"\",");

        }

        String strau=au.substring(0,au.lastIndexOf(","));

        strau+="]";

        st+=en.getKey()+">>>>"+strau+"\n";

//         section.put(en.getKey()+"**",strau);

         section.put(en.getKey(),strau);

        }

        System.out.println(st);

return section;

}

    /**

     * 通过filterChainDefinitions对默认的url过滤定义

     * 

     * @param filterChainDefinitions 默认的url过滤定义

     */

    public void setFilterChainDefinitions(String filterChainDefinitions) {

        this.filterChainDefinitions = filterChainDefinitions;

    }

    public Class<?> getObjectType() {

        return this.getClass();

    }

    public boolean isSingleton() {

        return false;

    }

    public FinancialSalesFuncFacade getFinancialSalesFuncFacade() {

        return financialSalesFuncFacade;

    }

    public void setFinancialSalesFuncFacade(FinancialSalesFuncFacade financialSalesFuncFacade) {

        this.financialSalesFuncFacade = financialSalesFuncFacade;

    }

    public FinancialSalesRoleFacade getFinancialSalesRoleFacade() {

        return financialSalesRoleFacade;

    }

    public void setFinancialSalesRoleFacade(FinancialSalesRoleFacade financialSalesRoleFacade) {

        this.financialSalesRoleFacade = financialSalesRoleFacade;

    }

}

猜你喜欢

转载自yuhuiblog6338999322098842.iteye.com/blog/2405478