`
s1318601
  • 浏览: 3966 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
文章分类
社区版块
存档分类
最新评论

struts2 安全的filter,根据url获取action的class及执行方法

    博客分类:
  • java
阅读更多
我接手个项目的安全部分,前面的显示的显示部分是用Extjs写的已经实现了功能模块的显示,要我做的是验证,当用户请求资源时是否拥有该权限,我就想到了filter,因为这技术实现了每次浏览器发起request的拦截,而aop在action上不太灵光,写切面由于分包的原因没法写一个切面,这也是一个原因;好了接下来看代码:
public class SecurityFilter extends StrutsPrepareAndExecuteFilter {}
注意红色的部分我继承了StrutsPrepareAndExecuteFilter,而没有直接实现Filter,
这样做的原因有:
1,访问StrutsPrepareAndExecuteFilter的资源
2,能正常的拦截action请求,如果直接实现Filter,可能会造成无法正常拦截action请求,我做的时候就是只能拦截诸如jpg,js等静态文件
3,减少web.xml的文件配置
代码如下:
 ActionMapping mapping = super.prepare.
          findActionMapping(request, response, true);

首先构建一个ActionMapping对象 这个对象中包含 诸如 namespace,method,等信息
prepare 是PrepareOperations ,在这个Filter中的init方法中调用super.init 即可得到正确的对象
Map<String, Object> extraContext
        = dispatcher.createContextMap(
                request, response, mapping, filterConfig.getServletContext());

dispatcher 是 Dispatcher,该类负责的是action的基本执行,不多赘述
在int中获取;代码如下:
[color=red]
 InitOperations init = new InitOperations();
        try {
            FilterHostConfig config = new FilterHostConfig(arg0);
            init.initLogging(config);
            this.dispatcher = init.initDispatcher(config);
        }catch (Exception e) {
            e.printStackTrace();
        }
[/color]
经典了:
 
[color=red]Configuration config =
            dispatcher.getConfigurationManager().getConfiguration();
        ActionProxy proxy = config.getContainer().getInstance(
                ActionProxyFactory.class).createActionProxy(
                mapping.getNamespace(), mapping.getName()
                , mapping.getMethod(), extraContext, true, false);[/color]


通过dispatcher,获取相关配置,在构建ActionProxy 对象,该对象包含,action所对应的类,method等,关键信息,ActionProxy是StrutsPrepareAndExecuteFilte所能执行的关键对象!有了它struts2 才能执行,这样就获得了相关类的所有信息,打完收工







分享到:
评论

相关推荐

    Struts2 in action中文版

    10.2.1 使用ActionClass-validations.xml声明验证元数据 223 10.2.2 研究内建的验证器 226 10.3 编写自定义验证器 227 10.3.1 检查密码强度的自定义验证器 227 10.3.2 使用自定义数据验证器 229 10.4 验证框架的高级...

    struts2 + spring + mybatis 框架整合jar包

    name&gt;&lt;filter-class&gt;org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter&lt;/filter-class&gt;&lt;/filter&gt;&lt;filter-mapping&gt;&lt;filter-name&gt;struts2&lt;/filter-name&gt;&lt;url-pattern&gt;*.action&lt;/url-pattern&gt;&lt;/...

    用Struts2新建一个应用的方法步骤

    用Struts2新建一个应用的方法步骤用Struts2新建一个应用的方法步骤: 1.首先新建一个Web Project。File——new——Web Project,在Project Name中输入一个合法的名字。例如:struts2 2. 单击采单Window——...

    struts2配置2.5版

    拦截器:web.xml 配置拦截器&lt;filter&gt; struts2.5的filter-class 与struts2.5以前版本有所不同 &lt;!-- 浏览器访问 http://localhost:8080/MyWeb/helloworld --&gt; --&gt; &lt;?xml version="1.0" encoding=...

    Struts2属性文件详解

    该属性指定需要Struts 2处理的请求后缀,该属性的默认值是action,即所有匹配*.action的请求都由Struts 2处理.如果用户需要指定多个请求后缀,则多个后缀之间以英文逗号(,)隔开. struts.serve.static 该属性设置是否...

    Struts课堂笔记.rar--struts2的struts.properties配置文件详解

    The URL extension to use to determine if the request is meant for a Struts action 用URL扩展名来确定是否这个请求是被用作Struts action,其实也就是设置 action的后缀,例如login.do的'do'字。 struts....

    struts2+kindEditor4.1.7

    &lt;filter-class&gt;org.springframework.web.filter.CharacterEncodingFilter&lt;/filter-class&gt; &lt;param-name&gt;encoding &lt;param-value&gt;UTF-8 &lt;param-name&gt;forceEncoding &lt;param-value&gt;true &lt;/filter&gt; &lt;filter...

    jfreechar 整合struts2.1.8版本生成线图,饼图,柱形图

    namespace:定义package命名空间 该命名空间影响到url的地址,例如此命名空间为/test那么访问是的地址为http://localhost:8080/struts2/test/XX.action --&gt; &lt;package name="com.kay.struts2" extends="struts-...

    struts-2.3.4.1所需的jar文件

    &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;filter-class&gt; org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter &lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts2&lt;/filter-...

    struts项目搭建

    Struts作为MVC 2的Web框架,自推出以来不断受到开发者的追捧,得到用广泛的应用。作为最成功的Web框架,Struts自然拥有众多的优点:  MVC 2模型的使用  功能齐全的标志库(Tag Library)  开放源代码 好了...

    java中文乱码解决方案

    &lt;filter-name&gt;struts-cleanup &lt;/filter-name&gt; &lt;filter-class&gt; org.apache.struts2.dispatcher.ActionContextCleanUp &lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts-cleanup &lt;/filter-name&gt; &lt;url-...

    jquery.param.patch.zip

    页面上jQuery需要把一个复杂类型的javascript数组对象作为参数传到Struts2 action,但是他们的默认格式不匹配导致action无法正确获得参数。 Struts2 action class SomeAction{ List&lt;SomeBean&gt; list; //getter...

    基于EXT SSI的简单树实现

    &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt; &lt;description&gt;struts2初始配置文件 &lt;param-name&gt;config &lt;param-value&gt;conf/struts/struts.xml &lt;/filter&gt; &lt;filter...

    客户关系管理系统框架搭建(二)

    * 根据路径创建SysUserGroupAction和在action中增加save方法,放置在cn.itcast.crm.web.action包下 public class SysUserGroupAction extends ActionSupport public String save() throws ...

    ssh(structs,spring,hibernate)框架中的上传下载

    HibernateDaoSupport封装了HibernateTemplate,而HibernateTemplate封装了Hibernate所提供几乎所有的的数据操作方法,如execute(HibernateCallback action),load(Class entityClass, Serializable id),save(final ...

    拦截器和控制器的区别

    4、访问流程 url -&gt; filter -&gt; struts.xml -&gt; package -&gt; action -&gt; name="userAction_*" -&gt; class -&gt; method="{1}" 5、核心struts.xml 6、提交策略 图片预览 个人信息完善 7、crud 增删改查 搜索 多删 假删 ...

    OA项目SSH整合框架

    一,集成 Spring 与 Hibernate 1,配置SessionFactory 1,配置 ---------------------- applicationContext.xml ------------------------ ... 2,在struts.xml中配置action时,在class属性中写bean的名称

    Spring + Hibernate + Struts 事务配置小例子(带提示框等小技巧)

    前几天搞 Spring + Hibernate + Struts 事务配置 ,网上找了好多资料,不过好无语,大多都是 Ctrl + V,浪费俺的宝贵时间 现在我总结配出一套,给大家参考参考,可能有不足,请大家多多交流。 附:内有弹出...

    从J2SE到J2EE知识点介绍

    3. Struts 2 标签库说明及使用 160 4. set 描述 169 5. text 描述 170 6. property 描述 170 7. Struts的异常处理 171 8. Struts的上传与下载 178 五、 Hibernate 192 (一) 前言 192 (二) 持久化层 193 (三) ORM介绍...

    spring3.2+strut2+hibernate4

    -- 更改struts2请求Action的后缀名,默认为action。若想去掉后缀,设为","即可 --&gt; &lt;constant name="struts.action.extension" value=","/&gt; &lt;!-- 当配置文件修改后,系统自动加载该文件。开发阶段建议打开此功能...

Global site tag (gtag.js) - Google Analytics