struts2中拦截器的原理与配置

首先,向大家推荐一个关于拦截器较好的blog:http://developer.51cto.com/art/200906/126894.htm

1.拦截器的使用规则:先定义;再使用;

拦截器的定义:

<interceptors>
			<interceptor name="theInterceptor1" class="com.shengsiyuan.interceptor.TheInterceptor1">
				<param name="test">shengsiyuan</param>
			</interceptor>
			
			<interceptor name="theInterceptor2" class="com.shengsiyuan.interceptor.TheInterceptor2">
			</interceptor>
			
			<interceptor name="theInterceptor3" class="com.shengsiyuan.interceptor.TheInterceptor3">
			</interceptor>
			
			<interceptor name="loginInterceptor" class="com.shengsiyuan.interceptor.LoginInterceptor">
			</interceptor>
</interceptors>

拦截器的使用:

		<action name="action1" class="com.shengsiyuan.struts2.Action1" method="myExecute">
			<result name="success" type="chain">
				<param name="actionName">action2</param>
				<param name="username">${username}</param>
				<param name="password">${password}</param>
				<param name="usernameAndPassword">${usernameAndPassword}</param>
			</result>
			
			<interceptor-ref name="theInterceptor1"></interceptor-ref>
			<interceptor-ref name="theInterceptor2"></interceptor-ref>
			<interceptor-ref name="theInterceptor3">
				<param name="includeMethods">execute, myExecute</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack"></interceptor-ref>
		</action>
2.

struts2中有一个系统默认的拦截器栈是 defaultStack,如果你手动引用自己的拦截器,系统默认的拦截器栈将不起作用;这样必需手动引入系统的拦截器栈<interceptor-ref name="defaultStack">

              </interceptor-ref>

如果想改变系统默认的拦截器栈,可以这样配置:

<default-interceptor-ref name="myDefaultInterceptorStack"></default-interceptor-ref>

其中myDefaultInterceptorStack是自己定义的拦截器栈名字;

如果拦截器栈中有多个拦截器,在执行action之前的顺序跟配置拦截器的顺序一致,而在action之后执行的顺序是相反的;

3.拦截器和拦截器栈是一个级别的,也就是说一个拦截器栈中包括许多拦截器一个拦截器栈中还可以包括许多拦截器栈,配置如下方式:

<interceptor-stack name="myDefaultInterceptorStack">
				<interceptor-ref name="loginInterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Struts2 ,可以使用拦截来防止 XSS 攻击。以下是一些步骤: 1. 创建一个类,继承 org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter。 ```java public class XSSFilter extends StrutsPrepareAndExecuteFilter { @Override protected void postInit(FilterConfig filterConfig) throws ServletException { super.postInit(filterConfig); // 添加 XSS 拦截 addFilter(new FilterHolder(new XSSInterceptor()), "/*", null); } } ``` 这个类的作用是在 Struts2 启动时添加一个 XSS 拦截。 2. 创建一个 XSS 拦截。 ```java public class XSSInterceptor implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { // 对请求参数进行 XSS 过滤 HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; filterChain.doFilter(new XSSRequestWrapper(request), response); } @Override public void destroy() { } } ``` 这个拦截的作用是对请求参数进行 XSS 过滤。 3. 创建一个 XSSRequestWrapper 类,继承 HttpServletRequestWrapper。 ```java public class XSSRequestWrapper extends HttpServletRequestWrapper { public XSSRequestWrapper(HttpServletRequest request) { super(request); } @Override public String getParameter(String name) { String value = super.getParameter(name); if (value != null) { value = Jsoup.clean(value, Whitelist.basic()); } return value; } } ``` 这个类的作用是重写 getParameter 方法,在获取请求参数时进行 XSS 过滤。 4. 在 web.xml 添加过滤配置。 ```xml <filter> <filter-name>xssFilter</filter-name> <filter-class>com.example.XSSFilter</filter-class> </filter> <filter-mapping> <filter-name>xssFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> ``` 这个配置的作用是将 XSSFilter 拦截应用于所有的请求。 以上是一个简单的 Struts2 XSS 拦截配置。但是需要注意的是,这个拦截只能对请求参数进行 XSS 过滤,对于响应内容的过滤需要使用其他的方案来解决。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值