Struts2拦截器配置和使用
拦截器是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> <!--具体的name和class必须写,指定这个拦截器的位置和名称方便下面调用-->
<interceptor-stack name="newStack">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref> <!-- 这个是系统默认的Stack,如果你只调用上面自己写的Stack,则会只执行login拦截器的方法,很多地方会发生错误接收不到值-->
</interceptor-stack>
</interceptors> <global-results> <!--这个是公共类,所有的action都会走这个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界面,以及没有验证用户名密码同时正确的情况,仅作为例子参考。
Struts2拦截器配置和使用的更多相关文章
- Struts2 拦截器配置以及实现
@(Java ThirdParty)[Struts|Interceptor] Struts2 拦截器配置以及实现 Struts2的拦截器应用于Action,可以在执行Action的方法之前,之后或者两 ...
- Struts2拦截器配置
1. 理解拦截器 1.1. 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作.拦截是AO ...
- Struts2拦截器配置实例
拦截器介绍 拦截器 的使用 ,源自Spring AOP(面向切面编程)思想 拦截器 采用 责任链 模式 * 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链. * 责任链每一个节 ...
- struts2 拦截器配置
CheckLoginInterceptor.java---拦截器具体实现类: package com.sunhoo.hcpms.struts2.action.interceptors; import ...
- 转载 - Struts2拦截器配置
出处:http://blog.csdn.net/axin66ok/article/details/7321430 目录(?)[-] 理解拦截器 1 什么是拦截器 2 拦截器的实现原理 拦截器的配置 使 ...
- struts2拦截器配置;拦截器栈;配置默认拦截器;拦截方法的拦截器MethodFilterInterceptor;完成登录验证
struts2.xml 内容 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts ...
- Struts2 拦截器配置及使用
在我的项目中有个需求,实现记录用户操作的系统日志,基于这个功能我首先想到的是Struts 的拦截器.配置一个全部Action都会拦截的拦截,写一个公用的服务.每当用户发送请求到Action 就记录相应 ...
- struts2拦截器interceptor的三种配置方法
1.struts2拦截器interceptor的三种配置方法 方法1. 普通配置法 <struts> <package name="struts2" extend ...
- struts2拦截器interceptor的配置方法及使用
转: struts2拦截器interceptor的配置方法及使用 (2015-11-09 10:22:28) 转载▼ 标签: it 365 分类: Struts2 NormalText Code ...
随机推荐
- 20155210潘滢昊 2016-2017-2《Java程序设计》第一周学习总结
20155210 2016-2017-2<Java程序设计>第一周学习总结 教材学习内容总结 1.1.1: 本节主要讲了Java的由来,1995年5月23日是Java公认的诞生日.还有版本 ...
- 20155226 mini DC 课堂测试补交
由于电脑突然出了点问题,我没有完成mini DC这个测试,现将测试内容及结果补交 题目如下 提交测试截图和码云练习项目链接,实现Linux下dc的功能,计算后缀表达式的值 代码如下 MyDC.clas ...
- 20155315 2016-2017-2 《Java程序设计》第三周学习总结
教材学习内容总结 1.构造方法决定类生成对象的方式 用this将已存在的参数的值指定给此参数. 用new建立新的实例. class Clothes { String color; char size; ...
- python 多线程笔记(5)-- 生产者/消费者模式
我们已经知道,对公共资源进行互斥访问,可以使用Lock上锁,或者使用RLock去重入锁. 但是这些都只是方便于处理简单的同步现象,我们甚至还不能很合理的去解决使用Lock锁带来的死锁问题. 要解决更复 ...
- hive bug
SHELL$ hive -S -e “set” | grep warehouse hive.metastore.warehouse.dir=/user/hive/warehouse hive.ware ...
- 说说ejabberd 离线消息的坑
使用过ejabberd的或许知道,也许踩过这个坑.那么就说说我们踩过的ejabberd的离线消息的坑吧. ejabberd原生的离线消息的机制是,一般用户保存100条离线消息,管理员保存5000条离线 ...
- 洛谷【P1052】过河
https://www.luogu.org/problemnew/show/P1052 题目描述 在河上有一座长度为 L 的独木桥, 一只青蛙想沿着独木桥从河的一侧跳到另一侧. 在桥上有一些石子, 青 ...
- python3【基础】-集合
集合( set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员(不可重复) class set(object) | set() - ...
- 关于XML文档操作类
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.X ...
- javascript提高篇
本章简介 本章内容比较少,有三个分享的知识.你可能都看过了,因为网上也有很多提问和解答,如果没看过或者没搞懂,你可以再看看这篇文章. 1. 数组去重方法的演变 -- 走向代码缩短化 2. [] ...