成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

J2EE+Flex的菜單及權限控制實踐

開發 后端
本文講述了J2EE+Flex的一些開發心得。作者一直是搞J2EE的,使用了blazeds,Flex通過RemoteObject調用Java的后臺方法。這樣的一個最大的好處就是不再需要struts這樣之類的框架了,可以直接使用spring中的bean。

最近學習了下Flex,我一直是搞J2EE的。所以想整合試著開發,J2EE+Flex在網上查了些資料,有好幾種方法。我這里使用的是blazeds,Flex通過RemoteObject調用Java的后臺方法。我個人覺得這樣的一個***的好處就是不再需要struts這樣之類的框架了,可以直接使用spring中的bean。要使用spring就必須先說下spring的整合問題,其實這個網上也有,只要就是一個SpringFactory類,這個類要實現FlexFactory接口,然后在WEB-INF/flex/services-config.xml中注冊改factory。代碼如下:

  1. < factories> 
  2.  < factory id="springContext" class="com.wangmeng.flex.SpringFactory">< /FACTORY> 
  3. < /FACTORIES> 

這樣配置好以后在WEB-INF/flex/remote-config.xml中只要把factory的名字寫成和上面配置對應的名字如:springContext,source的值配置為spring中bean的id就可以了。例如:

  1. < destination id="userLoginService"> 
  2.   < properties> 
  3.      < factory>springContext< /FACTORY> 
  4.      userLoginService< /SOURCE> 
  5.   < /PROPERTIES> 
  6.  < /DESTINATION> 

具體SpringFactory類的源代碼網上也有。

下面我說下我構思的控制菜單及權限的方法:首先要控制肯定要有用戶登錄的環節,這里具體怎么實現都可以,當時登陸后要將用戶的信息保存在session中,一遍在檢查權限是使用。獲取request,session都是通過flex.messaging.FlexContext提供的靜態方法

首先說菜單的控制,當用戶打開首頁,客戶端遠程調用加載菜單信息,當然這是沒有登陸,只有一些公開的菜單可以看見,用戶登錄后可以再重新加載菜單,這是系統會根據用戶的特權等級決定要返回的菜單列表(這里菜單的返回的數據來源你可以自己決定,可以放在數據庫里也可以是其他的)。

當然,只是這樣控制肯定不夠安全,那就是后面要說的對用spring中bean調用的控制:

要控制spring中的bean不被越權調用當然要從前面的SpringFactory類著手啦,我們需要在每次調用bean之前通過bean的名字檢查該用戶是否有權調用,如果有權調用就返回該bean,如果沒有權限就拋出一個沒有權限的ServiceException類。還是具體看下我的實現代碼吧,也許不是很優美,但是功能大致都實現了。

  1. package com.wangmeng.flex;  
  2.  
  3. import java.util.HashMap;  
  4. import java.util.List;  
  5.  
  6. import javax.servlet.http.HttpSession;  
  7.  
  8. import org.springframework.context.ApplicationContext;  
  9. import org.springframework.web.context.support.WebApplicationContextUtils;  
  10. import org.springframework.beans.BeansException;  
  11. import org.springframework.beans.factory.NoSuchBeanDefinitionException;  
  12.  
  13. import com.wangmeng.web.data.SysPrivilege;  
  14. import com.wangmeng.web.data.User;  
  15. import com.wangmeng.web.service.privilege.PrivilegeService;  
  16.  
  17. import flex.messaging.FactoryInstance;  
  18. import flex.messaging.FlexFactory;  
  19. import flex.messaging.config.ConfigMap;  
  20. import flex.messaging.services.ServiceException;  
  21.  
  22. public class SpringFactory implements FlexFactory {  
  23.  private static final String SOURCE = "source";  
  24.  private static HashMap beanMap = new HashMap();//存放權限檢查項  
  25.  
  26. //在factory初始化是裝在權限信息   
  27.  
  28. public void initialize(String id, ConfigMap configMap) {  
  29.   ApplicationContext appContext = WebApplicationContextUtils  
  30.     .getWebApplicationContext(flex.messaging.FlexContext  
  31.       .getServletConfig().getServletContext());  
  32.   PrivilegeService priviService = (PrivilegeService) appContext  
  33.     .getBean("sysPrivilegeService");  
  34.   List priviList = priviService.listAll();  
  35.   for (Object obj : priviList) {  
  36.    SysPrivilege privi = (SysPrivilege) obj;  
  37.    String name = privi.getServiceName();  
  38.    beanMap.put(name, privi);  
  39.   }  
  40.  }  
  41.  
  42.  public FactoryInstance createFactoryInstance(String id, ConfigMap properties) {  
  43.   SpringFactoryInstance instance = new SpringFactoryInstance(this, id,  
  44.     properties);  
  45.   instance.setSource(properties.getPropertyAsString(SOURCE, instance  
  46.     .getId()));  
  47.   return instance;  
  48.  }  
  49.  
  50.  public Object lookup(FactoryInstance inst) {  
  51.   SpringFactoryInstance factoryInstance = (SpringFactoryInstance) inst;  
  52.   return factoryInstance.lookup();  
  53.  }  
  54.  
  55.  static class SpringFactoryInstance extends FactoryInstance {  
  56.   SpringFactoryInstance(SpringFactory factory, String id,  
  57.     ConfigMap properties) {  
  58.    super(factory, id, properties);  
  59.   }  
  60.  
  61.   public String toString() {  
  62.    return "SpringFactory instance for id=" + getId() + " source=" 
  63.      + getSource() + " scope=" + getScope();  
  64.   }  
  65.  
  66. //在每次查找spring bean之前檢查權限。  
  67.  
  68.   public Object lookup() {  
  69.    String beanName = getSource();  
  70.    SysPrivilege privi = (SysPrivilege) beanMap.get(beanName);  
  71.    boolean hasRight = false;  
  72.    if (privi==null||privi.getLevel() <= 0) {  
  73.     hasRight = true;  
  74.    } else {  
  75.     HttpSession session = flex.messaging.FlexContext  
  76.       .getHttpRequest().getSession();  
  77.     User user = (User) session.getAttribute("user");  
  78.     if (user != null && user.getPrivilege() >= privi.getLevel()) {  
  79.      hasRight = true;  
  80.     } else {  
  81.      hasRight = false;  
  82.     }  
  83.    }  
  84.    if (hasRight) {  
  85.     ApplicationContext appContext = WebApplicationContextUtils  
  86.       .getWebApplicationContext(flex.messaging.FlexContext  
  87.         .getServletConfig().getServletContext());  
  88.     try {  
  89.      return appContext.getBean(beanName);  
  90.     } catch (NoSuchBeanDefinitionException nexc) {  
  91.      ServiceException e = new ServiceException();  
  92.      String msg = "Spring service named '" + beanName  
  93.        + "' does not exist.";  
  94.      e.setMessage(msg);  
  95.      e.setRootCause(nexc);  
  96.      e.setDetails(msg);  
  97.      e.setCode("Server.Processing");  
  98.      throw e;  
  99.     } catch (BeansException bexc) {  
  100.      ServiceException e = new ServiceException();  
  101.      String msg = "Unable to create Spring service named '" 
  102.        + beanName + "' ";  
  103.      e.setMessage(msg);  
  104.      e.setRootCause(bexc);  
  105.      e.setDetails(msg);  
  106.      e.setCode("Server.Processing");  
  107.      throw e;  
  108.     }  
  109.    }else{  
  110.     ServiceException e = new ServiceException();  
  111.     String msg = "你沒有足夠的權限調用'" 
  112.       + beanName + "' ";  
  113.     e.setMessage(msg);  
  114.     e.setRootCause(null);  
  115.     e.setDetails(msg);  
  116.     e.setCode("Server.Processing");  
  117.     throw e;  
  118.    }  
  119.   }  
  120.  }  
  121.  
  122. }  

代碼不是很難,稍微看下我想應該沒有問題。這就是我的構思,如果真的要應用還有許多細節要考慮,至少一個大致的框架完成了。

【編輯推薦】

  1. 結合struts和hibernate談J2EE架構的數據表示
  2. JAVA J2EE框架一覽
  3. 不同的J2EE項目開發流程
  4. Java EE = J2EE = Java企業應用
  5. J2EE線程代碼示例
責任編輯:book05 來源: 新浪博客
相關推薦

2009-06-23 08:06:46

J2EE體系架構J2EE模型J2EE設計模式

2009-06-23 08:03:02

2009-06-10 16:35:26

2011-06-07 09:37:32

J2EE

2009-03-31 09:39:13

J2EE事務并發并發訪問

2009-06-10 13:37:06

J2EE可伸縮性J2EE靈活性J2EE維護

2009-06-10 14:10:23

J2EE學習J2EE是什么

2009-06-23 16:48:26

J2EE常見問題J2EE平臺

2010-09-29 10:15:35

JDKJ2EEJ2SE

2009-06-11 17:06:11

J2EE歷史Java EE概述

2009-06-22 17:05:41

Java EEJava企業應用

2009-06-08 21:34:09

J2EEJ2SEJ2ME

2009-06-11 17:11:07

J2EE設計模式工廠模式

2009-07-09 16:06:10

JDK J2EE J2

2009-06-10 13:30:32

J2EE四層模型客戶層Web層

2019-01-08 16:26:43

Java EEJ2EEJakarta EE

2009-06-22 17:34:40

J2EE架構

2009-06-18 15:54:57

J2EE下使用JNDI

2009-06-23 08:12:48

J2EE調用存儲過程

2009-06-19 10:13:00

J2EE開發亂碼
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 黄网站免费在线 | 国产成人精品av | 日韩精品无码一区二区三区 | 国产综合在线视频 | 国产精品毛片一区二区在线看 | 一区二区三区在线 | 亚洲国产专区 | 一区二区三区中文 | 欧美一区二区三区视频 | av免费网 | 亚洲高清视频一区二区 | 国产性网 | 日韩在线视频免费观看 | 日韩高清一区 | 欧美黄色片 | 久久久久国产精品一区二区 | 日韩福利 | 中文字幕乱码视频32 | 亚洲精品久久久蜜桃 | 91久久精品 | 久久精品av麻豆的观看方式 | 男人的天堂久久 | 男女羞羞视频免费 | 亚洲精品三级 | 91精品久久久久久久久99蜜臂 | 成人在线观看免费 | 欧美日韩一区二区三区在线观看 | 91在线精品播放 | 欧美一级久久 | 亚洲人成人一区二区在线观看 | 亚洲欧美国产毛片在线 | 中文字幕国产精品 | 色狠狠一区 | 91porn在线观看 | 久久丁香 | 一区二区国产在线 | 亚洲国产一区二区三区四区 | 黄免费观看视频 | 亚洲午夜网 | 亚洲欧美精品 | 一区二区三区国产在线观看 |