Struts2之自定义拦截器

用户登录页面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 {//在类被摧毁的时候会执行该方法@Overridepublic void destroy() {// TODO Auto-generated method stub}//在struts2启动的时候会对拦截器进行实例化@Overridepublic void init() {// TODO Auto-generated method stub}//当拦截到action的时候会执行该方法@Overridepublic 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"""><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之自定义拦截器

相关文章:

你感兴趣的文章:

标签云: