项目中常用但查询有比较麻烦的数据,怎么进行初始化。

根据自己对项目的理解总结的,仅供自己参考!!

项目中有些数据不经常变化,用的有比较频繁,查询起来又比较耗时,所以在容器启动的时候对其进行初始化,然后放在ServletContext getContext.setAttribute共全局使用:

一、在web.xml 中配置监听器:

    <listener>
        <listener-class>com.geo.dsp.webapp.listener.StartupListener</listener-class>
    </listener>

StartupListener继承ServletContextListener,在contextInitialized方法里面对所需的数据赋值,大致代码如下:

     ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(context);①

LookupManager mgr = (LookupManager) ctx.getBean("lookupManager");②
//菜单权限验证类
DspMenuPerssionAdapter dspPermissionAdapter = new DspMenuPerssionAdapter();③
context.setAttribute(DspMenuPerssionAdapter.DSPMENUPERSSION, dspPermissionAdapter);
  //全部菜单
List<Menu>allMenus = mgr.getAllMenus();
Map<String,Menu> menuMap = new HashMap<String,Menu>();
for(Menu menu:allMenus){
if(menu.getAction()!=null){
menuMap.put(menu.getAction().toLowerCase(), menu);
}else{
menuMap.put(menu.getName().toLowerCase(), menu);
}

}
context.setAttribute("MENUMAP", menuMap);
context.setAttribute(Constants.AVAILABLE_MENUS, allMenus);

解释:①处通过Spring提供的工具类获取ApplicationContext对象。对于获取方法,可以参考此文         章:http://www.blogjava.net/Todd/archive/2010/04/22/295112.html

②获取所需要的实例类,这里lookupManager接口如下:

            public interface LookupManager {
    List<Role> getAllRoles();
    List<Menu>getAllMenus();
    List<Provider>getAllProviders();
   
}这里是需要初始化的数据。

③dspPermissionAdapter 类判断当前登录用户所能看到的菜单(项目菜单用struts menu 实现,包含权限控制),此类用到 org.springframework.security.core.Authentication。代码如下:

public class DspMenuPerssionAdapter implements PermissionsAdapter,Serializable {
/**

*/
private static final long serialVersionUID = 1921930077070193606L;
public static final String DSPMENUPERSSION="dspMenuPerssion";
//用户验证信息
private Authentication aut = null;
//用户拥有的菜单集合
private HashMap<String,Menu> menuMap = new HashMap<String, Menu>();
public void setAut(Authentication aut) {
this.aut = aut;
if(this.aut==null){
return;
}
//System.out.println("current user : ");
//System.out.print(DspContextHolder.getContext().getCurrentUser().getFullName());
User user = (User)this.aut.getPrincipal();
menuMap.clear();
Set<Role> roles= user.getRoles();
for(Role role1:roles){
Set<Menu> menus = role1.getMenus();
for(Menu menu1 :menus){
menuMap.put(menu1.getName(), menu1);
}
}

}
public boolean isAllowed(MenuComponent menu) {     //展示菜单的时候回调用此方法判断此菜单是否对该用户显示(项目中的菜单是程序拼接的一段JS代码)

if(menuMap.containsKey(menu.getName())){
return true;
}
return false;
}


}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值