Struts2自定义拦截器

  • 自定义登录拦截器
1.需求:在项目中,有很多的action的超链接,实现只有是登录的状态,才可以点击action的超链接实现功能,如果不是登录状态,点击action超链接返回登录界面
2.登录状态:使用session域对象实现
(1)登陆成功把数据放到session里面
(2)判断session是否有值,可以知道是否是登录状态
- 简单登录保存session用户对象
package com.sq.date;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;
import com.sq.entity.User;

/**
 *@author sq
 *使用表达式封装对象
 */
public class DateDemo3Action extends ActionSupport{
	
	//1.声明实体类
	private User user;
	
	//2.生成set,get方法
	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}
	
	@Override
	public String execute() throws Exception {
		System.out.println(user);
		HttpServletRequest request = ServletActionContext.getRequest();
		HttpSession session = request.getSession();
		session.setAttribute("user", user);
		return NONE;
	}
}
  • 拦截器实现过程
步骤
1.创建类,继承MethodFilterInterceptor
2.重新MethodFilterInterceptor类里面的方法写拦截器逻辑
package com.sq.interceptor;

import javax.servlet.http.HttpServletRequest;

import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;

/**
 *@author sq
 *
 */
public class LoginIntercepetor extends MethodFilterInterceptor{
	
	//写拦截逻辑
	@Override
	protected String doIntercept(ActionInvocation invocation) throws Exception {
		//得到session
		HttpServletRequest request = ServletActionContext.getRequest();
		Object object = request.getSession().getAttribute("user");
		if(null != object){
			//登陆状态
			//做类似放行操作,执行action
			return invocation.invoke();
		}else{
			//不是登录状态
			//不执行action,返回登录界面
			//到result标签里面找到名称为login的值,到配置路径
			return "login";
		}
	}

}


3.配置action和拦截器关系(注册拦截器)
(1)在要拦截的action标签所在的package标签声明拦截器
		<interceptors>
			<interceptor name="loginintercept" class="com.sq.interceptor.LoginIntercepetor"></interceptor>
		</interceptors>


(2)在具体的action标签里面使用声明的拦截器

<interceptor-ref name="loginintercept"></interceptor-ref>


(3)Struts2里面执行很多的默认拦截器,但是如果在action配置自定义拦截器,那么会出现问题:默认拦截器不会执行了

解决:把默认拦截器手动使用一次

<interceptor-ref name="defaultStack"></interceptor-ref>

4.配置拦截器,对action里面所有的方法进行拦截

(1)在action里面还有login的方法,会被拦截进入登录界面,永远登录不进去

(2)解决:直接通过配置让某些方法不进行拦截

<interceptor-ref name="loginintercept">
			<!-- 配置某些方法不进行拦截 
				name属性:excludeMethods
				值:action不拦截的方法名称
			-->
			<param name="excludeMethods">add</param>
		</interceptor-ref>

5.小问题

不是登录会出现页面嵌套

(1)设置打开页面位置 target="_parent"

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值