struts拦截器详解
拦截器是Struts2最强大的特性之一,它是一种可以让用户在Action执行之前和Result执行之后进行一些功能处理的机制。
说到拦截器interceptor,就会想到过滤器filter:
过滤器filter是对所有的东西进行过滤,包括.css,.js,.jpg等这些内容都过滤;
拦截器interceptor是对action进行拦截,是属于struts的工具。
这里以实现登录验证为例来进行拦截器的使用
首先创建一个Login类:
package com.dao; public class Login {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
然后配置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> <constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="false" /> <package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myin" class="com.util.Interceptor"></interceptor>
<interceptor name="login" class="com.util.SuccessInterceptor"></interceptor>
<interceptor-stack name="newStack">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors> <global-results>
<result name="nologin">/Login/login.jsp</result>
</global-results>
<action name="Login_login" class="com.controller.LoginAction" method="login">
<result>/Login/login.jsp</result>
</action>
<action name="Login_success" class="com.controller.LoginAction" method="success">
<result>/Login/success.jsp</result>
</action>
<action name="*_*" class="com.controller.{1}Action" method="{2}">
<interceptor-ref name="newStack"></interceptor-ref> <result>
{1}/{2}.jsp
</result>
</action>
</package> </struts>
配置LoginAction.java:
package com.controller; import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext;
import org.apache.struts2.interceptor.SessionAware;
import org.apache.tomcat.jni.User; import com.dao.Login;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven; public class LoginAction extends ActionSupport implements ModelDriven<Login>,SessionAware {
private Map<String,Object> session ;
private Login user = new Login(); public String login(){
return SUCCESS;
}
public String success(){
java.util.List<String> uid = new ArrayList<String>();
uid.add("admin");
uid.add("zhangsan");
uid.add("lisi");
uid.add("wangwu");
ActionContext context=ActionContext.getContext();
session=context.getSession();
Object obj = session.get("user");
if(obj==null){ if(uid.contains(user.getUsername())){
session.put("user", user.getUsername());
return SUCCESS;
}
else{
return "nologin";
} }
else{
return SUCCESS;
} }
@Override
public void setSession(Map<String, Object> arg0) {
// TODO 自动生成的方法存根
this.session=arg0; }
@Override
public Login getModel() { return user;
}
}
配置SuccessInterceptor.java:
package com.util; import java.util.Map; import javax.servlet.http.HttpSession; import org.apache.struts2.ServletActionContext; import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor; public class SuccessInterceptor extends AbstractInterceptor {
private Map<String,Object> session ;
@Override
public String intercept(ActionInvocation arg0) throws Exception {
System.out.println("asdasdas");
session= ActionContext.getContext().getSession();
if(session.get("user")==null){
return "nologin";
}
return arg0.invoke();
} }
实现login.jsp页面:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2>Login</h2>
<form action="Login_success">
username:<input type="text" name="username" ><br>
password:<input type="text" name="password" ><br>
<input type="submit" value="go" >
</form>
</body>
</html>
实现success.jsp页面:
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h2>success</h2>
username:<s:property value="#session.user" /><br>
password:<s:property value="password" /> <s:debug></s:debug>
</body>
</html>
一、拦截器的配置
1.SuccessInterceptor.java文件为拦截器的配置,继承自AbstractInterceptor接口。
2.配置struts.xml文件
<package name="default" namespace="/" extends="struts-default">
<interceptors>
<interceptor name="myin" class="com.util.Interceptor"></interceptor>
<interceptor name="login" class="com.util.SuccessInterceptor"></interceptor>//自己定义的一个名为login的拦截器,调用自com.util.SuccessInterceptor
<interceptor-stack name="newStack">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>//自定义一个名为newStack的拦截器,里面包含login的拦截器和defaultStack默认的拦截器
</interceptors> <global-results>
<result name="nologin">/Login/login.jsp</result>
</global-results>//通用走nologin的时候都走此处
<action name="Login_login" class="com.controller.LoginAction" method="login">
<result>/Login/login.jsp</result>
</action>
<action name="Login_success" class="com.controller.LoginAction" method="success">
<result>/Login/success.jsp</result>
</action>
<action name="*_*" class="com.controller.{1}Action" method="{2}">
<interceptor-ref name="newStack"></interceptor-ref> //调用自定义的拦截器 <result>
{1}/{2}.jsp
</result>
</action>
</package>
二、在拦截器中使用内置对象
1.ActionContext 获取Map.
2.ServletActionContext 获取HttpSession
3.实现SessionAware接口
这三种形式详见http://www.cnblogs.com/claricre/p/6548874.html
这样定义完毕后的登录并不完善,没有跳转404界面,以及没有验证用户名密码同时正确的情况,仅作为例子参考。
struts拦截器详解的更多相关文章
- Struts2 之 modelDriven & prepare 拦截器详解
struts2 ModelDriven & Prepareable 拦截器 前面对于 Struts2 的开发环境的搭建.配置文件以及 Struts2 的值栈都已经进行过叙述了!这次博文我们讲解 ...
- Struts2拦截器详解
一.Struts2拦截器原理: Struts2拦截器的实现原理相对简单,当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的 拦截器对象,然后串成一个列 ...
- struts2内置拦截器和自定义拦截器详解(附源码)
一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...
- [转]SpringMVC拦截器详解[附带源码分析]
目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:ht ...
- 通俗易懂之SpringMVC&Struts2前端拦截器详解
直接进入主题吧!一,配置Struts2的拦截器分两步走1配置对应的拦截器类:2在配置文件Struts.xml中进行配置拦截器同时在Strust2中配置拦截器类有三种方法1实现Interceptor接口 ...
- SpringMVC拦截器详解[附带源码分析]
目录 前言 重要接口及类介绍 源码分析 拦截器的配置 编写自定义的拦截器 总结 总结 前言 SpringMVC是目前主流的Web MVC框架之一. 如果有同学对它不熟悉,那么请参考它的入门blog:h ...
- struts2 18拦截器详解(七)
ChainingInterceptor 该拦截器处于defaultStack第六的位置,其主要功能是复制值栈(ValueStack)中的所有对象的所有属性到当前正在执行的Action中,如果说Valu ...
- spring--处理器拦截器详解——跟着开涛学SpringMVC
5.1.处理器拦截器简介 Spring Web MVC的处理器拦截器(如无特殊说明,下文所说的拦截器即处理器拦截器) 类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理. ...
- AspectCore动态代理中的拦截器详解(一)
前言 在上一篇文章使用AspectCore动态代理中,简单说明了AspectCore.DynamicProxy的使用方式,由于介绍的比较浅显,也有不少同学留言询问拦截器的配置,那么在这篇文章中,我们来 ...
随机推荐
- ZOJ 3471 Most Powerful (状压DP,经典)
题意: 有n个原子,每当两个原子碰撞时就会产生能量,并且消耗其中一个原子.已知每两个原子碰撞时消耗其中指定一个原子所产生的能量,问最多能产生多少能量? 思路: 一开始以为是找一个有序序列,使得能量最大 ...
- hiho一下 第四十四周 博弈游戏·Nim游戏(直接公式解)
证明看这http://hihocoder.com/contest/hiho44/problem/1 思路: 设 sg=a[1]^a[2]^...a[n],若sg=0,则先手Alice必败,否则必赢. ...
- ABAP system landscape和vue项目webpack构建的最佳实践
基于Netweaver的ABAP transport route一般都有dev,test和prod三种类型的系统. 而Vue前端项目的webpack build设置也类似. 以SAP成都研究院数字创新 ...
- spring5之SAXParseException:cvc-elt.1: 找不到元素 “beans” 的声明
之前SSM项目一直报错,就是找不到错误 气啊 后来在网上找到了答案:燕来spring5之后就不再需要写版本号了
- mongodb 导入导出
F:\Mongodb\bin>mongoexport.exe -h localhost:27017 -d proxy_db -c proxy_tb -o f:/p1.json 导出 -h 服务器 ...
- linux文件或文件夹常见操作
创建文件夹 mkdir [-p] DirName 在工作目录下,建立一个名为 A 新的子目录 : mkdir A 在工作目录下的 B目录中,建立一个名为 T 的子目录: 若 B 目录不存在, ...
- ORACLE的SQL JOIN方式大全
ORACLE的SQL JOIN方式大全 在ORACLE数据库中,表与表之间的SQL JOIN方式有多种(不仅表与表,还可以表与视图.物化视图等联结),官方的解释如下所示 A join is a que ...
- TypeError: Cannot read property 'tap' of undefined
E:\vue-project\vue-element-admin-master>npm run build:prod vue-element-admin@3.8.1 build:prod E:\ ...
- 分割catalina.out 每天生成一个文件
1. touch xxx(文件名字).sh 2. vim xxx.sh 写入 ----------------------- #!/bin/sh cd `dirname $0`pwdd=`d ...
- 私有DockerHub搭建
docker简介 一个开源的应用容器引擎,可以用来打包程序,可以包入依赖环境,这样只需要提供docker image即可,类似于虚拟机,但是更轻量级. 几个概念: Paas,platform as a ...