Strust2拦截器

Struts拦截器

filter:对所有的东西都过滤。.css,.js,.jpg。
interceptor:对action拦截。struts工具。

一、拦截器配置。
第一步:创建一个类,让其继承自AbstractInterceptor
第二步:配置struts.xml
1.添加<interceptors>配置节,添加拦截器配置。
2.在action中引用,<interceptors>中的配置。

注意:
1.在action中需要添加defaultStack引用
2.在建<interceptors>可以建立stack,把defaultStack也添加在里面,在引用的时候引用此stack即可。

二、在拦截器中使用内置对象。
1.ActionContext 获取Map.
2.ServletActionContext 获取HttpSession
3.实现SessionAware接口

三、使用拦截器实现登录身份验证。

有两个action是不能拦截。打回登录界面action,登录提交验证并写 session的action
在登录验证的auth方法中,分两种情况:
1.第一次登录验证。此时,session中没有信息,需要向session中添加登录信息
2.非第一次登录验证。此时,session中有信息,不需要再入session中添加信息

验证 autentication

授权 authorization

首先做个action:

package com.itnba.maya.controller;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.itnba.maya.DAO.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven<User>,SessionAware{
	private Map<String, Object> session = new HashMap<String, Object>();
	public Map<String, Object> getSession() {
		return session;
	}
	private User user = new User();
	public User getUser() {
		return user;
	}
	public void setUser(User user) {
		this.user = user;
	}
	public String login(){
		return SUCCESS;
	}
	public String auth(){
		List<String> uid = new ArrayList<String>();    //模拟从数据库接收数据
		uid.add("zhangsan");
		uid.add("lisi");
		uid.add("wangwu");
		uid.add("zhaoliu");
		Object obj = session.get("user");
		if(obj == null){           //判断是不是第一次进login
			if(uid.contains(user.getUsername())){  //判断输入的账号是不是已注册的账号
				session.put("user", user.getUsername());
				return SUCCESS;
			}
			else{
				return "login_error";
			}
		}
		else{
			return SUCCESS;
		}
	}

	@Override
	public User getModel() {

		return user;
	}
	@Override
	public void setSession(Map<String, Object> arg0) {
		this.session = arg0;

	}
}

然后在做一个拦截器:

package com.itnba.maya.util;

import java.util.HashMap;
import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class MyIntreceptor extends AbstractInterceptor{
	private Map<String, Object> session;
	@Override
	public String intercept(ActionInvocation arg0) throws Exception  {

		System.out.println("intercept is running");
		session = ActionContext.getContext().getSession();
		if(session.get("user") == null){
			return "login_error";
		}
		return arg0.invoke(); //继续往下走
	}

}

配置strust2.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>

    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
	<constant name="struts.ui.theme" value="simple"></constant>
    <package name="default" namespace="/" extends="struts-default">
		<interceptors>
			<interceptor name="myinterceptor" class="com.itnba.maya.util.MyIntreceptor"></interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="myinterceptor"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>

	<action name="Login_login" class="com.itnba.maya.controller.LoginAction" method="login">     //这是给登录界面
            <result>
                /Login/login.jsp
            </result>
        </action>
        <action name="Login_auth" class="com.itnba.maya.controller.LoginAction" method="auth">        //这是登录之后的结果界面
            <result>
                /Login/auth.jsp
            </result>
            <result name="login_error">
            	/Login/login.jsp
            </result>
        </action>
        <action name="*_*" class="com.itnba.maya.controller.{1}Action" method="{2}">          //这是拦截其他的页面
            <interceptor-ref name="myStack"></interceptor-ref>
            <result>
                /{1}/{2}.jsp
            </result>
            <result name="login_error">
            	/Login/login.jsp
            </result>
        </action>

    </package>
</struts>

这样就实现了对登录的拦截

时间: 2024-10-10 22:10:17

Strust2拦截器的相关文章

Struts2 源码分析——拦截器的机制

本章简言 上一章讲到关于action代理类的工作.即是如何去找对应的action配置信息,并执行action类的实例.而这一章笔者将讲到在执行action需要用到的拦截器.为什么要讲拦截器呢?可以这样子讲吧.拦截器的应用是sturts2核心的亮点之一.如果不明白拦截器是什么的话,那么你相当于没有学习过struts2.笔者本来想直接讲这一章的知识点.可是又怕读者可能对拦截器没有一个概念化的理解.为什么这么讲呢?struts2在设计拦截器这一个部分的内容.在笔者看来事实是以AOP为核心思想来设计的.

struts2.1.6教程五、拦截器

在前面我们已经初步使用过拦截器,下面继续细细探讨. 1.概述strust2中的拦截器 拦截器是Struts2框架的核心,它主要完成解析请求参数.将请求参数赋值给Action属性.执行数据校验.文件上传等工作.Struts2设计的灵巧性,拦截器起了关键性的作用,当需要扩展Struts2功能时,只需要提供对应拦截器,并将它配置在Struts2容器中即可:如果不需要该功能时,也只需要取消该拦截器的配置即可.    Struts2内建了大量的拦截器,这些拦截器以name-class对的形式配置在stru

java web 过滤器跟拦截器的区别和使用

1.首先要明确什么是拦截器.什么是过滤器 1.1 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AOP的一种实现策略. 在Webwork的中文文档的解释为--拦截器是动态拦截Action调用的对象.它提供了一种机制可以使开发者可以定义在一个action执行的前后执行的代码,也可以在一个action执行前阻止其执行.同时也是提供了一种可以提取action中可重用的部分的方式.

微信小程序之页面拦截器

场景 小程序有52个页面,其中13个页面无需任何身份,另外39个页面需要系统角色.对于这39个页面,如果微信用户没有系统角色,则跳转到登录页.是否有系统角色信息需要通过异步请求来获取. 需求分析&实现 对需求进行抽象,其实要的就是一个过滤器,对小程序页面的访问进行过滤,符合条件的通过,不符合条件进行其他处理. 使用过php的laravel框架的童鞋,肯定一下子就联想到了laravel框架的http中间件:HTTP 中间件提供一个方便的机制来过滤进入应用程序的 HTTP 请求,例如,Laravel

SpringMvc拦截器小测试

前言 俗话说做项目是让人成长最快的方案,最近小编写项目的时候遇到了一个小问题.小编在项目中所负责的后台系统,但是后台系统是通过系统的页面是通过ifame联动的,那么这时候问题就来了,后台所做的所有操作都是联动操作(都是基于所联动的)那么我后台所做的所有操作都是基于后台用户登录的情况下所做的.但是在联动中中所有页面都是单独存在的,如果要解决这个问题就需要在做操作之前判断用后台用户是否已经登录.想知道小编是如何实现的那就接着往下看. 简介 Spring MVC的拦截器不仅可实现Filter的所有功能

7.添加基于Spring的WebService拦截器

客户端拦截器: public class AccountInterceptor extends AbstractPhaseInterceptor<SoapMessage>{ private String name; private String password; public AccountInterceptor(String name,String password) { //Phase值决定了拦截器什么时候拦截到消息 //PRE_PROTOCOL准备请求时拦截 super(Phase.P

struts2学习笔记---自定义拦截器

什么是拦截器? struts2中拦截器分为Struts2定义好的拦截器和自定义的拦截器.其作用是在一个Action执行之前进行拦截,在Action执行之后又加入某些操作. 实现原理 当请求一个Action时,struts2会查找配置文件,并根据这个Action的配置实例化对应的拦截器对象,然后串成一个列表(list),最后一个一个地调用列表中的拦截器. 拦截器的执行流程 1.对Action进行预处理.(正序执行) 2.拦截器自身决定该不该执行后续的拦截器(由invoke()方法的返回值决定).

使用方法拦截器MethodInterceptor和AOP统一处理log

对每个接口的请求记录log的方法有很多种,比如用filter.mvc interceptor.method interceptor等.如果需要记录请求消息的payload,前两种不适用.下面介绍第三种的实现方法. 第一步:引入包依赖 <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);"></span><pre name=&

过滤器、监听器、拦截器的区别

1.过滤器 Servlet中的过滤器Filter是实现了javax.servlet.Filter接口的服务器端程序,主要的用途是过滤字符编码.做一些业务逻辑判断等.其工作原理是,只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,此时你就可以对请求或响应(Request.Response)统一设置编码,简化操作:同时还可进行逻辑判断,如用户是否已经登陆.有没有权限访问该页面等等工作.它是随你的web应用启动而启动的,只初始化一次,以后就可以拦截相关请求,只有当你的web应用