BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...
生活随笔
收集整理的這篇文章主要介紹了
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 Code5、加載左側菜單
?
轉載于:https://www.cnblogs.com/x54256/p/8612776.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的BOS12——多对多添加方法,多对多页面需要字段问题(不多的话直接提供get方法),修改Realm中授权方法(查询数据库),缓存Java对象的方法,加载左侧菜单(ztree提供pId)...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到家被盗空是怎么回事
- 下一篇: 梦到和前夫的家人吵架是怎么回事