码迷,mamicode.com
首页 > 其他好文 > 详细

Struts2之自定义拦截器

时间:2015-06-21 11:57:22      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

用户登录页面login.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%
    request.getSession().setAttribute("user", "has logined");
 %>
用户已经登录!

要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口

package struts2.example.interceptor;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;

public class PermissionInterceptor implements Interceptor {

	//在类被摧毁的时候会执行该方法
	@Override
	public void destroy() {
		// TODO Auto-generated method stub

	}
	//在struts2启动的时候会对拦截器进行实例化
	@Override
	public void init() {
		// TODO Auto-generated method stub

	}

	//当拦截到action的时候会执行该方法
	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		//先判断用户是否登录
		Object user=ActionContext.getContext().getSession().get("user");
		if(user!=null){//user不为空,表示用户已登录
			return invocation.invoke();//调用该方法被拦截到的方法就可以执行
		}
		ActionContext.getContext().put("message", "你没有执行该操作的权限");
		return "success";
	}

}
登录结果页面showInfo.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<html>
  <head>
    <title>My JSP 'showInfo.jsp' starting page</title>
  </head>
  
  <body> 
    ${message}
  </body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
         "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
         "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
	<constant name="struts.multipart.maxSize" value="10701096" />
	<package name="csdn" namespace="/control" extends="struts-default">
		<interceptors>
			<interceptor name="permissionInterceptor"
				class="struts2.example.interceptor.PermissionInterceptor" />
			<interceptor-stack name="permissionInterceptorStack">
				<interceptor-ref name="defaultStack" />
				<interceptor-ref name="permissionInterceptor" />
			</interceptor-stack>
		</interceptors>
		<global-results>
			<result name="success">/WEB-INF/page/showInfo.jsp</result>
		</global-results>
		<action name="list_*" class="struts2.example.action.FilterAction"
			method="{1}">
			<interceptor-ref name="permissionInterceptorStack" />
		</action>
	</package>
</struts>
在action里面注册了自定义拦截器后,struts2很多默认的拦截器会被屏蔽掉,也就无法使用struts2很多默认的功能。为了解决这个问题,可定义拦截器栈。在拦截器栈中,定义在前面的先执行,后定义的后执行。
如果要让包里所有的action都可以用这个拦截器,可用<default-interceptor-ref name="permissionStack"/>
如果要让某个拦截器为某个action特有,又不想该action失去struts2默认的一些拦截功能,可在该action下定义多个拦截器。
可在struts-default.xml里查看defaultStack的具体信息:

            <interceptor-stack name="defaultStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servletConfig"/>
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="prepare"/>
                <interceptor-ref name="chain"/>
                <interceptor-ref name="debugging"/>
                <interceptor-ref name="scopedModelDriven"/>
                <interceptor-ref name="modelDriven"/>
                <interceptor-ref name="fileUpload"/>
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="multiselect"/>
                <interceptor-ref name="staticParams"/>
                <interceptor-ref name="actionMappingParams"/>
                <interceptor-ref name="params">
                  <param name="excludeParams">dojo\..*,^struts\..*</param>
                </interceptor-ref>
                <interceptor-ref name="conversionError"/>
                <interceptor-ref name="validation">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
                <interceptor-ref name="workflow">
                    <param name="excludeMethods">input,back,cancel,browse</param>
                </interceptor-ref>
            </interceptor-stack>

Struts2之自定义拦截器

标签:

原文地址:http://blog.csdn.net/lindonglian/article/details/46580691

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!