日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢(xún)
選擇下列產(chǎn)品馬上在線(xiàn)溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷(xiāo)解決方案
J2EE+Flex的菜單及權(quán)限控制實(shí)踐

最近學(xué)習(xí)了下Flex,我一直是搞J2EE的。所以想整合試著開(kāi)發(fā),J2EE+Flex在網(wǎng)上查了些資料,有好幾種方法。我這里使用的是blazeds,F(xiàn)lex通過(guò)RemoteObject調(diào)用Java的后臺(tái)方法。我個(gè)人覺(jué)得這樣的一個(gè)***的好處就是不再需要struts這樣之類(lèi)的框架了,可以直接使用spring中的bean。要使用spring就必須先說(shuō)下spring的整合問(wèn)題,其實(shí)這個(gè)網(wǎng)上也有,只要就是一個(gè)SpringFactory類(lèi),這個(gè)類(lèi)要實(shí)現(xiàn)FlexFactory接口,然后在WEB-INF/flex/services-config.xml中注冊(cè)改factory。代碼如下:

我們提供的服務(wù)有:成都做網(wǎng)站、網(wǎng)站制作、微信公眾號(hào)開(kāi)發(fā)、網(wǎng)站優(yōu)化、網(wǎng)站認(rèn)證、長(zhǎng)豐ssl等。為上千余家企事業(yè)單位解決了網(wǎng)站和推廣的問(wèn)題。提供周到的售前咨詢(xún)和貼心的售后服務(wù),是有科學(xué)管理、有技術(shù)的長(zhǎng)豐網(wǎng)站制作公司

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

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

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

具體SpringFactory類(lèi)的源代碼網(wǎng)上也有。

下面我說(shuō)下我構(gòu)思的控制菜單及權(quán)限的方法:首先要控制肯定要有用戶(hù)登錄的環(huán)節(jié),這里具體怎么實(shí)現(xiàn)都可以,當(dāng)時(shí)登陸后要將用戶(hù)的信息保存在session中,一遍在檢查權(quán)限是使用。獲取request,session都是通過(guò)flex.messaging.FlexContext提供的靜態(tài)方法

首先說(shuō)菜單的控制,當(dāng)用戶(hù)打開(kāi)首頁(yè),客戶(hù)端遠(yuǎn)程調(diào)用加載菜單信息,當(dāng)然這是沒(méi)有登陸,只有一些公開(kāi)的菜單可以看見(jiàn),用戶(hù)登錄后可以再重新加載菜單,這是系統(tǒng)會(huì)根據(jù)用戶(hù)的特權(quán)等級(jí)決定要返回的菜單列表(這里菜單的返回的數(shù)據(jù)來(lái)源你可以自己決定,可以放在數(shù)據(jù)庫(kù)里也可以是其他的)。

當(dāng)然,只是這樣控制肯定不夠安全,那就是后面要說(shuō)的對(duì)用spring中bean調(diào)用的控制:

要控制spring中的bean不被越權(quán)調(diào)用當(dāng)然要從前面的SpringFactory類(lèi)著手啦,我們需要在每次調(diào)用bean之前通過(guò)bean的名字檢查該用戶(hù)是否有權(quán)調(diào)用,如果有權(quán)調(diào)用就返回該bean,如果沒(méi)有權(quán)限就拋出一個(gè)沒(méi)有權(quán)限的ServiceException類(lèi)。還是具體看下我的實(shí)現(xiàn)代碼吧,也許不是很優(yōu)美,但是功能大致都實(shí)現(xiàn)了。

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

代碼不是很難,稍微看下我想應(yīng)該沒(méi)有問(wèn)題。這就是我的構(gòu)思,如果真的要應(yīng)用還有許多細(xì)節(jié)要考慮,至少一個(gè)大致的框架完成了。


網(wǎng)站名稱(chēng):J2EE+Flex的菜單及權(quán)限控制實(shí)踐
分享URL:http://www.5511xx.com/article/dhsohgh.html