本文主要是介绍【Struts2学习笔记(10)】自定义拦截器管理权限访问,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
(1)拦截器的功能什么的都不说了直接上代码来的直接些:
要自定义拦截器需要实现com.opensymphony.xwork2.interceptor.Interceptor接口:
下面自定义一个拦截器:
package cn.lc.interceptor;import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;public class PermissionInterceptor implements Interceptor
{public void destroy(){}public void init(){}public String intercept(ActionInvocation invocation) throws Exception{Object user = ActionContext.getContext().getSession().get("user");if (user != null){return invocation.invoke(); // 如果user不为null,代表用户已经登录,允许执行action中的方法}ActionContext.getContext().put("message", "你没有权限执行该操作");return "success";}}
Action的代码:
package cn.itcast.action;public class HelloWorldAction { private String message;public String getMessage() {return message;}public void setMessage(String message) {this.message = message;}public String addUI(){this.message = "addUI";return "success";}public String execute() throws Exception{this.message = "execute";return "success";}
}
struts.xml文件配置如下:
<?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.enable.DynamicMethodInvocation" value="false" /><constant name="struts.action.extension" value="do,action" /><constant name="struts.multipart.maxSize" value="10701096" /><package name="employee" namespace="/control/employee" extends="struts-default"><interceptors><interceptor name="permission" class="cn.itcast.interceptor.PermissionInterceptor" /><interceptor-stack name="permissionStack"><!-- 系统的拦截器放在前面 自己定义的放在后面 --><interceptor-ref name="defaultStack" /><interceptor-ref name="permission" /></interceptor-stack></interceptors><!-- 定义默认的拦截器 可以让action一方面使用改默认的拦截器 还可以使用系统自带的拦截器 --><default-interceptor-ref name="permissionStack" /><global-results><result name="success">/WEB-INF/page/message.jsp</result></global-results><!-- 使用下边的方法,这样的话会覆盖默认拦截器中的拦截器栈等功能 --><action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}"></action></package>
</struts>
二、过程如下:
1.当表单进行提交的时候:
<form action="<%=request.getContextPath()%>/control/employee/list_execute.action" method="post">id:<input type="text" name="person.id"><br/>name:<input type="text" name="person.name"><br/><input type="submit" value="发送"/></form>
2.找到struts.xml文件中的action 匹配到 list_*处,虽然此action中没有拦截器
(正常的配置应该是这样的
<action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}"><result name="success">/WEB-INF/page/hello.jsp</result><interceptor-ref name="permissionStack"/>
</action>
)
3.但是我们有默认的拦截器,这样的话我们不仅可以使用自定义的拦截器 还可以使用系统自带的拦截器!实现了拦截功能!
<default-interceptor-ref name="permissionStack" />
注意:(1)因为struts2中如文件上传,数据验证,封装请求参数到action等功能都是由系统默认的defaultStack中的拦截器实现的,所以我们定义的拦截器需要引用系统默认的defaultStack,这样应用才可以使用struts2框架提供的众多功能。
(2)如果希望包下的所有action都使用自定义的拦截器,可以通过<default-interceptor-ref name=“permissionStack”/>把拦截器定义为默认拦截器。(每个包只能指定一个默认拦截器。另外,一旦我们为该包中的某个action显式指定了某个拦截器,则默认拦截器不会起作用。)
注:转载请注明出处!
这篇关于【Struts2学习笔记(10)】自定义拦截器管理权限访问的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!