Struts2 自定义拦截器

1. 什么是拦截器

拦截器是Struts2最强大的特性之一,是Struts2的核心之一,Struts2中的很多功能都是由拦截器完成的,是AOP编程思想的一个应用形式。

自定义一个拦截器需要三步:

1 .自定义一个实现Interceptor接口(或者继承自AbstractInterceptor)的类。
2 .在struts.xml中注册上一步中定义的拦截器。
3 .在需要使用的Action中引用上述定义的拦截器,为了方便也可将拦截器定义为默认的拦截器,这样在不加特殊声明的情况下所有的Action都被这个拦截器拦截。

拦截器的执行过程:

Struts2 自定义拦截器_第1张图片

2. 检查登录案例

通过一个案例来展示如何自定义拦截器,主要功能:用户登录成功后,将用户信息存入session域中;只有当用户登录成功后,才能执行相关的操作;如果用户没有登录直接访问页面执行操作的话,页面将跳转至登录页面。

2.1 相关页面

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>




	后台登录
	
    
    
    

    
    
	
    
    
    



    
    

    

operate.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>


  
    Operation
  
  
    	点点点
  

success.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>


  
    success
  
  
   	执行操作! 

2.2 编写动作类

public class UserAction extends ActionSupport implements ModelDriven {

	private User user = new User();

	public User getModel() {
		return user;
	}
	//-------------
	public String operate() throws Exception{
		return SUCCESS;
	}

	// -------------------
	public String login() throws Exception {
		if (user.getUsername().equals("admin")&&user.getPassword().equals("123")) {
			HttpSession session = ServletActionContext.getRequest().getSession();
			session.setAttribute("user", user);
			return SUCCESS;
		}
		return "input";
	}

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

}

2.3 自定义一个拦截器类继承MethodFilterInterceptor(AbstractInterceptor 或实现Interceptor接口等)

public class CheckLoginInterceptor extends MethodFilterInterceptor {

	@Override
	protected String doIntercept(ActionInvocation invo) throws Exception {
		HttpSession session = ServletActionContext.getRequest().getSession();
		User user = (User)session.getAttribute("user");
		if(user==null){
			return "login";
		}
        //放行
		return invo.invoke();
	}

}

2.4 配置struts.xml文件

有三种基本配置方法:

方法一:每一个action单独使用,需要多次引用,否则默认将被覆盖(只有少数几个页面需要拦截)

				
					
					
				

方法二:将多个拦截器打包生成自定义栈,action使用栈(一般是有部分页面需要进行拦截)

				* 自定义拦截器栈 
				
					
					
				
				* action引用
				
					
				

方法三:将自定义栈,把默认栈覆盖(大部分页面都需要拦截)




	
	
	
		
			
			
			
			
				
				
				
				
                        
                        login

			
		
		
		
		
		
			/index.jsp
		
	
	
	
		
			/operate.jsp
			/index.jsp
		
	
	
	
		
			/success.jsp
		
	

2.5 结果:

           直接访问operate.jsp页面时,点击链接,将自动跳转index.jsp页面

           当登录成功后,点击链接,跳转至success.jsp页面。

你可能感兴趣的:(JavaEE,SSH学习)