我接手个项目的安全部分,前面的显示的显示部分是用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和Struts1是两个非常著名的Java Web框架,它们在处理请求时通常会在URL中显式地显示.action或.do后缀。然而,为了提供更友好的用户体验和增强安全性,有时我们需要隐藏这些扩展名。本篇文章将详细介绍如何在...
在这个场景中,我们将深入探讨如何使用`URL Rewrite Filter`来重写Struts2的Action。 首先,让我们理解`URL Rewrite Filter`的基本概念。这个工具提供了一种方式,通过配置XML文件(如`urlrewrite.xml`)来定义一...
### Struts2中Action间的参数传递方法 在Struts2框架中,经常需要实现Action之间的跳转,并在跳转过程中传递必要的参数。这种需求在实际开发中非常常见,尤其是在需要根据用户的不同操作来调用不同的业务逻辑时。...
在Struts2的配置文件(通常为struts.xml或struts.properties)中,我们定义Action的映射规则,包括请求路径、方法调用以及结果视图等。默认情况下,一个Action类对应一个请求URL,但通过特定配置,可以让一个Action...
在Struts2中,URL通常以`.do`结尾,这是默认的Action映射后缀。然而,为了提供更加用户友好的URL和提高搜索引擎优化(SEO),开发者可能希望将这些后缀更改为更自然的扩展名,如`.html`。本教程将深入探讨如何在...
在 Struts2 中使用 `redirect-action` 来实现 Action 之间的跳转是一种常见的做法,特别是在需要按顺序执行多个 Action 的业务场景中。通过这种方式,不仅可以保持应用程序的良好结构,还能有效地组织业务流程。同时...
总结来说,Struts2 Action的参数包括`name`、`class`、`namespace`、`method`等,它们共同构成了Action的完整配置,使我们能够灵活地定义和控制Action的行为。同时,通过`method`属性和DMI,我们可以实现一个类中多...
`method="{1}"`告诉Struts2将URL路径中通配符匹配的部分作为实际要执行的方法名。 这种方式不仅减少了配置的复杂性,还提高了代码的可读性和可维护性。此外,它还支持动态方法调用,即根据请求参数的不同,动态决定...
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter...
最近,Struts2 发生了两个严重的漏洞,分别是 S2-016 和 S2-017,这两个漏洞可能会导致攻击者执行恶意代码,从而危害到网站的安全。 S2-016 漏洞是由于 Struts2 的 Ognl 表达式语言解析器存在缺陷,从而导致攻击者...
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` - ...
Struts2作为一款强大的MVC框架,其核心配置文件`struts.xml`在应用程序中扮演着至关重要的角色。本文将深入解析`struts.xml`中的Action配置,帮助开发者更好地理解和运用这一关键组件。 首先,Action配置是Struts2...
本文将详细介绍Struts2框架中有关URL配置的相关知识点,包括请求转发、内部action处理以及请求重定向等核心概念,并深入探讨Struts2中 `<s:url>` 标签的应用。 #### 请求转发至JSP页面 在Struts2中,默认情况下,...
1. `@Action`: 这是Struts 2中最核心的注解,用于标记一个方法为处理请求的Action。你可以指定Action的名字、结果页面和其他属性。例如: ```java @Action(value = "myAction", results = { @Result(name = ...
动态方式允许我们不通过配置文件直接根据URL调用Action类中的方法。这种方式更加灵活,但可能导致安全问题。例如,用户可以猜测并尝试调用未公开的方法。开启DMI需在`struts.xml`中添加以下配置: ```xml ...
在Action类的执行方法返回一个字符串,这个字符串代表了结果的名称,Struts2会根据这个名字找到对应的Result类型来决定如何处理响应。默认的Result类型是`dispatcher`,它会将控制权交给一个JSP页面。例如,`execute...
例如,将上面的URL从`/struts2urlrewrite/welcome.action`重写为`/welcome`: ```xml <from>/welcome <to type="forward">/struts2urlrewrite/welcome.action ``` 这条规则会将所有匹配`/welcome`的请求...
Struts2 Action 处理中文乱码问题是一个常见的挑战,尤其是在进行Web开发时,由于编码格式不统一,可能导致输入或显示的中文字符出现乱码。以下是对两种解决方法的详细解释: 方法一:通过配置Struts2的i18n编码 ...
此外,还可以使用Struts2提供的开发工具,如 strut2-convention-plugin,它简化了Action和结果页面的配置,使得Action类名和方法名可以直接映射到URL。 总结起来,Struts2的Action属性注入值功能是通过OGNL和拦截器...
过滤器处理请求,解析`struts.xml`,根据URL找到对应的Action,执行Action的业务逻辑,最后返回Result指定的视图给浏览器。 5. **命名空间(Namespace)**:命名空间是Struts2中组织Action的重要机制,它决定了...