天天看點

編寫攔截器進行攔截

編寫攔截器進行攔截,沒有擷取登入賬号則傳回登入界面

1.首先編寫	UserInterceptor.java 

package com.itheima.interceptor;


import org.apache.struts2.ServletActionContext;


import com.itheima.domain.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;


/**
 * 自定義攔截器,判斷目前系統是否已經登入,如果登入,繼續執行。如果沒有登入,跳轉到登入頁面
 * @author Administrator
 */
public class UserInterceptor extends MethodFilterInterceptor{


	private static final long serialVersionUID = 335018670739692955L;
	
	/**
	 * 進行攔截的方法
	 */
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		// 擷取session對象
		User user = (User) ServletActionContext.getRequest().getSession().getAttribute("existUser");
		if(user == null){
			// 說明,沒有登入,後面就不會執行了
			return "login";
		}
		//發行
		return invocation.invoke();
	}
}

2.在struts.xml中進行配置,代碼如下
	<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
	
	<package name="crm" namespace="/" extends="struts-default">
		
		<!-- 配置攔截器 -->
		<interceptors>
			<interceptor name="UserInterceptor" class="com.itheima.interceptor.UserInterceptor"/>
		</interceptors>
		
		<global-results>
			<result name="login">/login.htm</result>
		</global-results>
		
		<!-- 配置使用者的子產品 -->
		<action name="user_*" class="com.itheima.action.UserAction" method="{1}">
			<result name="success">/index.htm</result>
			<interceptor-ref name="UserInterceptor" >
				<!--login方法不攔截  -->
				<param name="excludeMethods">login</param>
			</interceptor-ref>
			<interceptor-ref name="defaultStack" />
		</action>
		
		<!-- 客戶子產品 -->
		<action name="customer_*" class="com.itheima.action.CustomerAction" method="{1}">
			<result name="list">./jsp/customer/list.jsp</result>
			<interceptor-ref name="UserInterceptor" />
			<interceptor-ref name="defaultStack" />
		</action>
		
	</package>
    
</struts>

3.編寫UserAction.java
	
package com.itheima.action;

import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts2.ServletActionContext;
import com.itheima.domain.User;
import com.itheima.service.UserService;
import com.opensymphony.xwork2.ActionSupport;


/**
 * 使用者的子產品的控制器
 * @author Administrator
 */
public class UserAction extends ActionSupport{


	private static final long serialVersionUID = 1305643617977647333L;
	
	/**
	 * 處理登入功能
	 * @return
	 */
	public String login(){
		// 這邊沒有學習功能,封裝資料,現在還需要使用request對象
		// 怎麼擷取request方式
		HttpServletRequest request = ServletActionContext.getRequest();
		// 擷取請求參數
		Map<String, String[]> map = request.getParameterMap();
		User user = new User();
		try {
			BeanUtils.populate(user, map);
			// 調用業務層
			User existUser = new UserService().login(user);
			// 判斷
			if(existUser == null){
				// 說明,使用者名或者密碼錯誤了
				return LOGIN;
			}else{
				// 存入到session中
				request.getSession().setAttribute("existUser", existUser);
				return "success";
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "success";
	}
}

4.然後就是UserService.java
package com.itheima.service;

import java.util.List;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;
import com.itheima.dao.CustomerDao;
import com.itheima.domain.Customer;
import com.itheima.utils.HibernateUtils;


/**
 * 客戶的業務層
 * @author Administrator
 */
public class CustomerService {
	/**
	
	 * 儲存客戶
	 * @param customer
	 */
	public void saveCustomer(Customer customer){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		// 調用業務層
		new CustomerDao().save(customer);
		tr.commit();
	}
	
	public List<Customer> findAll(){
		Session session = HibernateUtils.getCurrentSession();
		Transaction tr = session.beginTransaction();
		// 調用業務層
		List<Customer> list= new CustomerDao().findAll();
		tr.commit();
		
		return list;
	}
	@Test
	public void run1(){
		Customer customer = new Customer();
		customer.setCust_name("測試");
		this.saveCustomer(customer);
	}
}

5.編寫CustomerDao.java
package com.itheima.dao;

import java.util.List;
import org.hibernate.Session;
import com.itheima.domain.Customer;
import com.itheima.utils.HibernateUtils;

public class CustomerDao {
	
	/**
	 * 儲存客戶
	 * @param customer
	 */
	public void save(Customer customer){
		Session session = HibernateUtils.getCurrentSession();
		session.save(customer);
	}
	
	/**
	 * 查詢所有客戶
	 */
	public List<Customer> findAll() {
		// TODO Auto-generated method stub
		Session session = HibernateUtils.getCurrentSession();
		List<Customer> list = session.createQuery("from Customer").list();
		return list;
		
	}
}
	
           

繼續閱讀