`
s1318601
  • 浏览: 4127 次
  • 性别: 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 才能执行,这样就获得了相关类的所有信息,打完收工







分享到:
评论

相关推荐

    去掉.action去掉.do字样 隐藏struts2 URL地址action, strus1的扩展名do也是同理.zip

    Struts2和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...

    使用urlrewrite重写struts2的action

    在这个场景中,我们将深入探讨如何使用`URL Rewrite Filter`来重写Struts2的Action。 首先,让我们理解`URL Rewrite Filter`的基本概念。这个工具提供了一种方式,通过配置XML文件(如`urlrewrite.xml`)来定义一...

    struts2 action跳转action传参数

    ### Struts2中Action间的参数传递方法 在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。...

    struts2一个action处理多个请求 struts2实例

    在Struts2的配置文件(通常为struts.xml或struts.properties)中,我们定义Action的映射规则,包括请求路径、方法调用以及结果视图等。默认情况下,一个Action类对应一个请求URL,但通过特定配置,可以让一个Action...

    struts2改写url后缀demo

    在Struts2中,URL通常以`.do`结尾,这是默认的Action映射后缀。然而,为了提供更加用户友好的URL和提高搜索引擎优化(SEO),开发者可能希望将这些后缀更改为更自然的扩展名,如`.html`。本教程将深入探讨如何在...

    struts2 result转向到action

    在 Struts2 中使用 `redirect-action` 来实现 Action 之间的跳转是一种常见的做法,特别是在需要按顺序执行多个 Action 的业务场景中。通过这种方式,不仅可以保持应用程序的良好结构,还能有效地组织业务流程。同时...

    Struts2 Action参数详细说明

    总结来说,Struts2 Action的参数包括`name`、`class`、`namespace`、`method`等,它们共同构成了Action的完整配置,使我们能够灵活地定义和控制Action的行为。同时,通过`method`属性和DMI,我们可以实现一个类中多...

    struts2利用通配符调用同一个Action里面不同的方法

    `method="{1}"`告诉Struts2将URL路径中通配符匹配的部分作为实际要执行的方法名。 这种方式不仅减少了配置的复杂性,还提高了代码的可读性和可维护性。此外,它还支持动态方法调用,即根据请求参数的不同,动态决定...

    Struts2表单数据获取项目

    &lt;filter-class&gt;org.apache.struts2.dispatcher.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;/*&lt;/url-pattern&gt; &lt;/filter...

    struts2 最新漏洞 S2-016、S2-017修补方案 .docx

    最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者执行恶意代码,从而危害到网站的安全。 S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者...

    Struts2_Action学习笔记、通配符{1},{2}

    &lt;filter-class&gt;org.apache.struts2.dispatcher.FilterDispatcher&lt;/filter-class&gt; &lt;/filter&gt; &lt;filter-mapping&gt; &lt;filter-name&gt;struts2&lt;/filter-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/filter-mapping&gt; ``` - ...

    Struts2中struts_xml的Action配置详解

    Struts2作为一款强大的MVC框架,其核心配置文件`struts.xml`在应用程序中扮演着至关重要的角色。本文将深入解析`struts.xml`中的Action配置,帮助开发者更好地理解和运用这一关键组件。 首先,Action配置是Struts2...

    struts2中的url

    本文将详细介绍Struts2框架中有关URL配置的相关知识点,包括请求转发、内部action处理以及请求重定向等核心概念,并深入探讨Struts2中 `&lt;s:url&gt;` 标签的应用。 #### 请求转发至JSP页面 在Struts2中,默认情况下,...

    Struts 2使用注解配置Action

    1. `@Action`: 这是Struts 2中最核心的注解,用于标记一个方法为处理请求的Action。你可以指定Action的名字、结果页面和其他属性。例如: ```java @Action(value = "myAction", results = { @Result(name = ...

    struts2 action的三种访问方式

    动态方式允许我们不通过配置文件直接根据URL调用Action类中的方法。这种方式更加灵活,但可能导致安全问题。例如,用户可以猜测并尝试调用未公开的方法。开启DMI需在`struts.xml`中添加以下配置: ```xml ...

    struts2获取参数,解决乱码,跳转

    在Action类的执行方法返回一个字符串,这个字符串代表了结果的名称,Struts2会根据这个名字找到对应的Result类型来决定如何处理响应。默认的Result类型是`dispatcher`,它会将控制权交给一个JSP页面。例如,`execute...

    Struts2下使用urlReWrite的最简实例(MyEclipse工程)

    例如,将上面的URL从`/struts2urlrewrite/welcome.action`重写为`/welcome`: ```xml &lt;from&gt;/welcome &lt;to type="forward"&gt;/struts2urlrewrite/welcome.action ``` 这条规则会将所有匹配`/welcome`的请求...

    Struts2Action处理中文乱码

    Struts2 Action 处理中文乱码问题是一个常见的挑战,尤其是在进行Web开发时,由于编码格式不统一,可能导致输入或显示的中文字符出现乱码。以下是对两种解决方法的详细解释: 方法一:通过配置Struts2的i18n编码 ...

    Struts2--为Action的属性注入值

    此外,还可以使用Struts2提供的开发工具,如 strut2-convention-plugin,它简化了Action和结果页面的配置,使得Action类名和方法名可以直接映射到URL。 总结起来,Struts2的Action属性注入值功能是通过OGNL和拦截器...

    Struts2课堂学习总结

    过滤器处理请求,解析`struts.xml`,根据URL找到对应的Action,执行Action的业务逻辑,最后返回Result指定的视图给浏览器。 5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了...

Global site tag (gtag.js) - Google Analytics