BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...
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、常见权限控制方式 2、基于shiro提供url拦截方式验证权限 3、在realm中授权 5、总结验证权限方式(四种) 6、用户注销7、基于treegrid实现菜单展示...
1 课程计划 1. 常见权限控制方式 2. 基于shiro提供url拦截方式验证权限 3. 在realm中授权 4. 基于shiro提供注解方式验证权限 5. 总结验证权限方式(四种) 6. 用户注销 ...
- Vue3 中如何加载动态菜单?
松哥之前写了两篇文章和大家分享了 TienChin 项目中的菜单数据问题,还没看过的小伙伴请戳这里: Vue 里,多级菜单要如何设计才显得专业? TienChin 项目动态菜单接口分析 这两篇文章主要 ...
- java x00_有没有通过python反序列化java对象的方法
我将java对象存储在hbase中(例如,假设我有一个对象'User',有3个参数,比如firstname.middlename和lastname).我在java中使用以下代码进行序列化Object ...
- java猫抓老鼠_用猫抓老鼠的实例理解java中面向对象的编程与类和对象以及方法的概念...
今天看到马士兵讲的关于面向对象编程的思路,用了一个猫抓老鼠的例子,我觉得这个例子非常形象,于是写在这里,方便学习理解和以后查看 class cat{ //声明一个类–"猫" int ...
- Vue + Spring Boot 项目实战(十五):动态加载后台菜单
重要链接: 「系列文章目录」 「项目源码(GitHub)」 本篇目录 前言 一.后端实现 1.表设计 2.pojo 3.菜单查询接口(树结构查询) 二.前端实现 1.后台页面设计 2.数据处理 3.添 ...
- ehcache 缓存java对象_Ehcache 整合Spring 使用页面、对象缓存
Ehcache在很多项目中都出现过,用法也比较简单.一般的加些配置就可以了,而且Ehcache可以对页面.对象.数据进行缓存,同时支持集群/分布式缓存.如果整合Spring.Hibernate也非常的 ...
- jQuery-EasyUI异步加载树形菜单
为什么80%的码农都做不了架构师?>>> 1]把tree定义在一个空<ul>元素 <div><ul id="layout_west_tr ...
- 比较两种php调用Java对象的方法
Java语言功能强大,因此在许多情况下在php中来调用Java的功能将十分有用.在php中调用Java语言有两种方法,一种是使用php中 的Java扩展模块,另一种是使用minij2ee应用服务器提供 ...
- 正确加载MySQL驱动的语句_使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法...
用Oracle SQL Developer时遇到no ocijdbc11 in java.library.path怎么办 不是配置环境变量,而是去选项里面,添加数据库的驱动 jdbc的驱动没有在cla ...
最新文章
- QT:(1)QT下载地址
- python代码用c语言封装_树莓派开发ADC芯片CS1237(C语言和python库开发)
- 冒号运算 java_java 8 双冒号运算符
- java synchronized关键字_Java synchronized 关键字,你用的对吗?
- 文理分科 (最小割问题)
- 5W-Lora电台的远距离传输优势
- 六、表达式:前缀后缀
- JAVA——多线程——实现n个共享数据的线程同步
- tensorflow学习之tf.assign
- 开课吧里的python学习是真的吗-做客李晨nic淘宝直播 胡海泉胡彦斌带货开课吧Python...
- 用 JAVA 开发游戏连连看(之四)添加更多的功能
- GPU/GPGPU架构(三十二)
- SpringBoot整合quartz的一个例子
- 博弈论学习笔记——拍卖原理
- 南京大学软件学院考研计算机网络汇总
- 【每日新闻早报】9月17日 星期二
- Linu笔记-管线命令pipe
- 基于FPGA的DDS混频及原理
- 手机app服务器端开发初期---工具选择
- 域名防红直连防封怎么布置?