现在的位置: 首页 > 综合 > 正文

复习struts2之拦截器

2013年08月24日 ⁄ 综合 ⁄ 共 2064字 ⁄ 字号 评论关闭
拦截器能够通过权限进行拦截,下面写一个小例子
实例分析:
用户登录后可以访问action中的所有方法
User.jsp(执行完该jsp之后,状态变为已登录)
//设置用户登录状态   可以通过session来判断
如果用户没有登录,不允许访问action中的方法,并且提示“你没有权限执行该操作”

User.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.getSession().setAttribute("user", "itcast");
	
%>
用户已经登录

Quit.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	request.getSession().removeAttribute("user");
	
%>
用户已经退出

message.jsp
${message}

HelloWord.java
	private String message;

	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String execute(){
		this.message=" execute()";
		return "success";
	}

UserInterceptor.java
public class UserInterceptor implements Interceptor {
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
	}
	@Override
	public void init() {
		// TODO Auto-generated method stub
	}
	//当拦截到action时调用该方法   该方法相当于 aop编程中的环绕通知
	@Override
	public String intercept(ActionInvocation interceptor) throws Exception {
		// TODO Auto-generated method stub
		Object user=ActionContext.getContext().getSession().get("user");
		//如果user不为null,代表用户已经登录,运行执行action中的方法
		if(user!=null){
			return interceptor.invoke();
		}
		ActionContext.getContext().put("message", "你没有权限执行该操作");
		return "message";	
	}
}

struts.xml
<!-- 注册拦截器 -->
		<interceptors>
			<interceptor name="user" class="cn.csdn.Interceptor.UserInterceptor"/>
			<interceptor-stack name="usetStack">
				<!-- 要把系统的拦截器栈放在前面,把自定义的拦截器放在后面 。放在前面会先执行-->
				<!-- 引入系统得拦截器栈 -->
				<interceptor-ref name="defaultStack"/>
				<interceptor-ref name="user"/>
			</interceptor-stack>
		</interceptors>
		
		<global-results>
			<result name="message">/WEB-INF/page/message.jsp</result>
		</global-results>
		
		<action name="helloword" class="cn.itcast.action.HelloWordAction" method="execute">
			<result name="success">/WEB-INF/page/message.jsp</result>

			<!-- 如果这样写的话,虽然能够使用这个自定义的拦截器了,但是会失去struts2一系列的拦截器 
				如果既想使用自定义拦截器,又不想失去struts2中一系列的拦截器的话,可以定义一个拦截器栈
			-->
			<!-- <interceptor-ref name="user"/> -->
			
						<!--引入上面定义的拦截器栈  -->
			<interceptor-ref name="usetStack"></interceptor-ref>
		</action>
	</package>

访问:
当直接访问action时,会显示文本你没有权限执行该操作,当访问User.jsp之后再访问action时,显示的文本就为execute()了
注意:如果action中已经有了拦截器,那么所有的默认拦截器都会失效,不过action中可以放置多个拦截器

抱歉!评论已关闭.