1、多对多添加方法

@Override
public void add(Role model, String functionIds) {// 1.先将角色保存到数据库roleDao.save(model);// 2.为角色添加权限(一定要坚持映射文件中是否inverse)if (StringUtils.isNotBlank(functionIds)){String[] functionIdList = functionIds.split(",");for (String fid : functionIdList) {// 可以自己new一个Function对象,也可以用functionId获取Function对象Function function = new Function();function.setId(fid);model.getFunctions().add(function);}}}

2、多对多页面需要字段问题(不多的话直接提供get方法)

在多对多关系时,由于比较复杂,所以我们可以为页面指定的字段加上一个get方法

3、修改Realm中授权方法(查询数据库)

多对多连表查询

 1 //授权方法
 2 protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
 3
 4     SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();
 5
 6     // 获取用户对象
 7     TUser user = (TUser) SecurityUtils.getSubject().getPrincipal();
 8 //        TUser user2 = (TUser) principals.getPrimaryPrincipal();
 9 //        System.out.println(user1 == user2);
10
11     List<Function> functionList = null;
12     if (user.getUsername().equals("admin")){
13         DetachedCriteria dc = DetachedCriteria.forClass(Function.class);
14         functionList = functionDao.findAll(dc);
15     }else{
16         functionList = functionDao.findByUserId(user.getId());
17     }
18
19
20     for (Function f: functionList) {
21         info.addStringPermission(f.getCode());
22     }
23     // 直接(不查数据库)为用户授权
24 //        info.addStringPermission("staff-list");
25
26     return info;
27 }

BOSRealm

 1 @Override
 2 public List<Function> findByUserId(String id) {
 3
 4     // distinct==》去重
 5     String hql = "select distinct f from Function f inner join f.roles r inner join r.users u where u.id=?";
 6
 7     List<Function> list = (List<Function>) super.getHibernateTemplate().find(hql,id);
 8
 9     return list;
10 }

FunctionDao

但这样有一个缺陷,每次访问一个页面都会重新进行数据库查询;所以要整一个缓存

4、ehcache是专门缓存插件,可以缓存Java对象,提高系统性能。

第一步:在pom.xml文件中引入ehcache的依赖

第二步:在项目中提供ehcache的配置文件

<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="../config/ehcache.xsd"><diskStore path="java.io.tmpdir"/><defaultCachemaxElementsInMemory="10000"eternal="false"timeToIdleSeconds="120"timeToLiveSeconds="120"overflowToDisk="true"maxElementsOnDisk="10000000"diskPersistent="false"diskExpiryThreadIntervalSeconds="120"memoryStoreEvictionPolicy="LRU"/>
</ehcache>

第三步:在spring配置文件中配置缓存管理器对象,并注入给安全管理器对象

 1 <!--配置安全管理器-->
 2 <bean name="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
 3     <property name="realm" ref="bosRealm"/>
 4     <!--注入缓存管理器-->
 5     <property name="cacheManager" ref="cacheManager"/>
 6 </bean>
 7
 8 <!--注册缓存管理器-->
 9 <bean name="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
10     <!--注入ehcache配置文件-->
11     <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
12 </bean>

View Code

5、加载左侧菜单

转载于:https://www.cnblogs.com/x54256/p/8612776.html

BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...相关推荐

  1. 项目一:第十二天 1、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...

    1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...

  2. Vue3 中如何加载动态菜单?

    松哥之前写了两篇文章和大家分享了 TienChin 项目中的菜单数据问题,还没看过的小伙伴请戳这里: Vue 里,多级菜单要如何设计才显得专业? TienChin 项目动态菜单接口分析 这两篇文章主要 ...

  3. java x00_有没有通过python反序列化java对象的方法

    我将java对象存储在hbase中(例如,假设我有一个对象'User',有3个参数,比如firstname.middlename和lastname).我在java中使用以下代码进行序列化Object ...

  4. java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...

    今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...

  5. Vue + Spring Boot 项目实战(十五):动态加载后台菜单

    重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...

  6. ehcache 缓存java对象_Ehcache 整合Spring 使用页面、对象缓存

    Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...

  7. jQuery-EasyUI异步加载树形菜单

    为什么80%的码农都做不了架构师?>>>    1]把tree定义在一个空<ul>元素 <div><ul id="layout_west_tr ...

  8. 比较两种php调用Java对象的方法

    Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中 的Java扩展模块,另一种是使用minij2ee应用服务器提供 ...

  9. 正确加载MySQL驱动的语句_使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法...

    用Oracle SQL Developer时遇到no ocijdbc11 in java.library.path怎么办 不是配置环境变量,而是去选项里面,添加数据库的驱动 jdbc的驱动没有在cla ...

最新文章

  1. QT:(1)QT下载地址
  2. python代码用c语言封装_树莓派开发ADC芯片CS1237(C语言和python库开发)
  3. 冒号运算 java_java 8 双冒号运算符
  4. java synchronized关键字_Java synchronized 关键字,你用的对吗?
  5. 文理分科 (最小割问题)
  6. 5W-Lora电台的远距离传输优势
  7. 六、表达式:前缀后缀
  8. JAVA——多线程——实现n个共享数据的线程同步
  9. tensorflow学习之tf.assign
  10. 开课吧里的python学习是真的吗-做客李晨nic淘宝直播 胡海泉胡彦斌带货开课吧Python...
  11. 用 JAVA 开发游戏连连看(之四)添加更多的功能
  12. GPU/GPGPU架构(三十二)
  13. SpringBoot整合quartz的一个例子
  14. 博弈论学习笔记——拍卖原理
  15. 南京大学软件学院考研计算机网络汇总
  16. 【每日新闻早报】9月17日 星期二
  17. Linu笔记-管线命令pipe
  18. 基于FPGA的DDS混频及原理
  19. 手机app服务器端开发初期---工具选择
  20. 域名防红直连防封怎么布置?

热门文章

  1. LintCode Find the Weak Connected Component in the Directed Graph
  2. 企业级应用架构(三)三层架构之数据访问层的改进以及测试DOM的发布
  3. 最常被程序员们谎称读过的计算机书籍
  4. Android用Intent和Bundle传list
  5. 在新版CSDN博客添加友情链接
  6. 车牌识别中的可识性、放弃率、精度与识别率辨析
  7. Powershell-获取DHCP地址租用信息
  8. Python自动化运维:Django之View视图和Template
  9. 企业网站6个常见的优化漏洞
  10. 爱立信与中国联通成功完成国内首个LTE三载波聚合大规模部署测试