一.模拟下面例子
1.HelloWorldAction.java 是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"; } }
2.提供登陆user.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.getSession().setAttribute("user", "itcast"); %> 用户已经登录
3.在提供退出quit.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% request.getSession().removeAttribute("user"); %> 用户已经退出登录
4.接下来要实现自定义拦截器 ,必须实现相应接口。
拦截器类PermissionInterceptor.java
package cn.itcast.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() { } //下面这个方法类似于spring aop的环绕通知 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"; } }
5.配置拦截器栈,这样依然可以使用struts2本身的拦截器,否则会只是用自己的拦截器而把默认拦截器丢掉。
src路径下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> <global-results> <result name="success">/WEB-INF/page/message.jsp</result> </global-results> <action name="list_*" class="cn.itcast.action.HelloWorldAction" method="{1}"> <interceptor-ref name="permissionStack" /> </action> </package> </struts>
如果在struts.xml中把<interceptor-ref name="permissionStack" />放在外面如下,则会对包中的所有类进行拦截,这个可能以后会用到<?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> <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>
6.使用struts.xml当然要配web.xml
web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
7.补充,struts2中各种拦截器
8.message.jsp测试页面用于显示结果
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>My JSP 'message.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> </head> <body> ${message } <br/> <s:debug></s:debug> </body> </html>