Struts2源码分析--根据namespace+name获得Action.java

因为项目需要一些动态的权限验证.需要根据命名空间找到类,然后反射出所有的方法做权限的验证.还希望能够动态的配置页面显示的模块.

实现的过程中遇到一个问题,如果根据namespace获得对应的action.java呢??

找了些资料,并没有发现直接回答这个问题的.只要自己来找吧.

打开FilterDispatcher.java来看看doFilter都组了什么.

 

//根据URI地址获得当前mapping
mapping = actionMapper.getMapping(request, dispatcher.getConfigurationManager());
 
//利用mapping执行action
            dispatcher.serviceAction(request, response, servletContext, mapping);

 以上两个是关键点..首先struts2会根据当前的uri获得mapping..实现的原理和我处理页面URL的差不多.有时间我贴出来给大家看..然后又通过mapping和必要的参数开始执行action的方法..那我需要的一个字第二部里了.点击Ctrl进入看看吧.

这个时候打开了Dispatcher.java

 

Configuration config = configurationManager.getConfiguration();
            //通过namespace+name+method+extracontext执行action
            ActionProxy proxy = config.getContainer().getInstance(ActionProxyFactory.class).createActionProxy(
                    namespace, name, method, extraContext, true, false);

 嘿嘿找到了.原来是在ActionProxy上啊.这就简单了.打开我的Action开始测试一下.

		Dispatcher dispatcher = Dispatcher.getInstance();
		ConfigurationManager configurationManager = dispatcher.getConfigurationManager();
		Configuration config = configurationManager.getConfiguration();
		Container container = config.getContainer();
		ActionProxyFactory actionProxyFactory = container.getInstance(ActionProxyFactory.class);
        //针对当前需求,这里用到的只有"/system/module"和第二个"module"有用.,其他参数没有实际用途.
        ActionProxy proxy = actionProxyFactory.createActionProxy("/system/module", "module", "module", null, true, false);
        Object obj = proxy.getAction();
        System.out.println(obj.getClass().getName());

  页面输出

com.wisdom.pmall.web.system.module.ModuleAction
 

可以根据命名空间和名称来获得类了...已经达到最开始预想的要求了..现在我能不能遍历所有的命名空间和名字呢?

这些东西应该是在config里的吧.

config.getPackageConfigs()

 可以返回所有的配置信息.包括了命名空间.但是没有name...看来还需要近一步跟踪...马上下班了.明天再弄吧!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值