文档章节

简单例子分析struts的自定义拦截器

丶KKdo
 丶KKdo
发布于 2016/08/09 19:37
字数 557
阅读 2
收藏 0
点赞 0
评论 0

首先,创建web项目,配置好web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>struts-auth</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <filter>
 	<filter-name>struts2</filter-name>
 	<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
 </filter>
 
 <filter-mapping>
 	<filter-name>struts2</filter-name>
 	<url-pattern>/*</url-pattern>
 </filter-mapping>
 
</web-app>

然后,在webRoot目录下编写一个简单的前台页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
    <%@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=utf-8">
<title>Insert title here</title>
</head>
<body>
<h2>用户登录</h2>
<form action="admin.html" method="post">
用户名:
<input type="text" name="username">${loginError}
<input type="submit" value="登录">
</form>
</body>
</html>

在WEB-INF下新建webPage目录,建立一个简单的admin.jsp页面

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!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=utf-8">
<title>Insert title here</title>
</head>
<body>
后台管理页面!
</body>
</html>

建立Action类:

package com.auth.action;

import java.util.Map;

import org.apache.struts2.interceptor.SessionAware;

import com.opensymphony.xwork2.ActionSupport;

public class AdminAction extends ActionSupport implements SessionAware {
	private String username;
	private Map<String, Object> session;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public Map<String, Object> getSession() {
		return session;
	}

	public void setSession(Map<String, Object> session) {
		this.session = session;
	}
	
	public String login() {
		if(username.equals("admin")) {
			session.put("username", username);
			return SUCCESS;
		}else {
			session.put("loginError", "用户名错误!");
			return ERROR;
		}
	}
}

建立Inteceptor类:

package com.auth.interceptor;

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

public class UserInterceptor extends AbstractInterceptor {

	@Override
	public String intercept(ActionInvocation invocation) throws Exception {
		String name = (String) ActionContext.getContext().
				getSession().get("username");
		if(name != null) {
			String result = invocation.invoke();
			return result;
		}
		return "error";
	}

}

配置struts.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
	"http://struts.apache.org/dtds/struts-2.1.dtd">

<struts>

    <constant name="struts.devMode" value="true" />
    <!-- action的后缀名为html -->
    <constant name="struts.action.extension" value="html"></constant>

	<package name="auth" extends="struts-default" namespace="/">
		<interceptors>
			<interceptor name="auth" class="com.auth.interceptor.UserInterceptor"></interceptor>
			<interceptor-stack name="myStack">
				<interceptor-ref name="auth"></interceptor-ref>
				<interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		
		<action name="admin" class="com.auth.action.AdminAction" method="login">
			<result>/WEB-INF/webPage/admin.jsp</result>
			<result name="error">/login.jsp</result>
		</action>
		
		<action name="auth">
			<result>/WEB-INF/webPage/admin.jsp</result>
			<interceptor-ref name="myStack"></interceptor-ref>
			<result name="error">/login.jsp</result>
		</action>
	</package>
</struts>

然后,直接访问auth.html会跳转到登录页面,然后输入admin点击登录,正确跳转到后台页面,接着由于username已经存放在session中,所以再次访问auth.html能够正常跳转到admin.html的后台页面.

© 著作权归作者所有

共有 人打赏支持
丶KKdo
粉丝 1
博文 24
码字总数 13683
作品 0
成都
程序员
使用 Spring 更好地处理 Struts 动作

Struts Recipes 的合著者 George Franciscus 将介绍另一个重大的 Struts 整合窍门 —— 这次是将 Struts 应用程序导入 Spring 框架。请跟随 George,他将向您展示如何改变 Struts 动作,使得...

SeanCai
2010/08/29
0
0
Struts2拦截器(Interceptor)

理解拦截器 1.1. 什么是拦截器: 拦截器,在AOP(Aspect-Oriented Programming)中用于在某个方法或字段被访问之前,进行拦截然后在之前或之后加入某些操作。拦截是AOP的一种实现策略。 在W...

倚小丁
2010/11/01
0
0
Java:struts2之struts.xml 配置详解整理........ing

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <!-- include节点是struts2中组......

刘纪君
2014/03/14
0
0
struts2.0中struts.xml配置文件详解

<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd" > <struts> <!-- include节点是struts2中组......

crazyinsomnia
2010/03/25
0
0
struts2使用json需要注意的问题

JSON(Java Script Object Notation),是一种语言无关的数据交换格式。 JSON插件是Structs 2 的Ajax插件,通过利用JSON插件,开发者可以很方便,灵活的利用Ajax进行开发。 Json是一种轻量级...

zhengjh1987
2012/08/10
0
0
在Struts 2中实现文件上传

前一阵子有些朋友在电子邮件中问关于Struts 2实现文件上传的问题, 所以今天我们就来讨论一下这个问题。 实现原理 Struts 2是通过Commons FileUpload文件上传。Commons FileUpload通过将HTT...

哈全文
2012/06/22
0
0
Struts2请求处理源码分析

当用户向Struts2发送请求时,FilterDispatcher的doFilter()方法自动调用,doFilter()方法处理请求过程,如下: 1. 创建值栈对象stack; 2. 创建Action上下文对象; 3. 对请求进行重新封装,此...

陶邦仁
2012/09/27
0
0
struts1 初始化流程说明

struts初始化起始于ActionServlet。正如其名,它是Servlet,按照Servlet的声明周期,struts的初始化放在了init方法之中。 public void init() throws ServletException { // struts初始化流程...

STG0825
2014/03/24
0
1
Struts2 关于i18n国际化的问题,可点击链接实现中英文切换

1.首先把Struts2的环境搭建起来, 2.建立一个action.测试i18n的。 3.下面这个是struts.xml的简单配置,里有2中properties文件的配置,一种是全局的,一种是局部的, <?xml version="1.0" en...

zkool
2012/11/20
0
0
【学习笔记9】Struts2的处理流程与Action的管理方式

StrutsPrepareAndExecuteFilter是Struts 2框架的核心控制器,它负责拦截由<url-pattern>/*</url-pattern>指定的所有用户请求,当用户请求到达时,该Filter会过滤用户的请求。默认情况下,如果...

张超
2013/04/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Android 获取各大音乐平台的真实下载地址

废话 电脑使用谷歌浏览器或者QQ浏览器的时候。。。。。。。说不清楚,还是看图吧 大概意思就是,只要网页上需要播放,只要能播放并且开始播放,这个过程就肯定会请求到相关的音乐资源,然后就...

她叫我小渝
32分钟前
0
0
shell中的函数、shell中的数组、告警系统需求分析

shell中的函数 格式: 格式: function f_name() { command } 函数必须要放在最前面 示例1(用来打印参数) 示例2(用于定义加法) 示例3(用于显示IP) shell中的数组 shell中的数组1 定义数...

Zhouliang6
今天
2
0
用 Scikit-Learn 和 Pandas 学习线性回归

      对于想深入了解线性回归的童鞋,这里给出一个完整的例子,详细学完这个例子,对用scikit-learn来运行线性回归,评估模型不会有什么问题了。 1. 获取数据,定义问题     没有...

wangxuwei
今天
1
0
MAC安装MAVEN

一:下载maven压缩包(Zip或tar可选),解压压缩包 二:打开终端输入:vim ~/.bash_profile(如果找不到该文件新建一个:touch ./bash_profile) 三:输入i 四:输入maven环境变量配置 MAVEN_HO...

WALK_MAN
今天
0
0
33.iptables备份与恢复 firewalld的9个zone以及操作 service的操作

10.19 iptables规则备份和恢复 10.20 firewalld的9个zone 10.21 firewalld关于zone的操作 10.22 firewalld关于service的操作 10.19 iptables规则备份和恢复: ~1. 保存和备份iptables规则 ~2...

王鑫linux
今天
2
0
大数据教程(2.11):keeperalived+nginx高可用集群搭建教程

上一章节博主为大家介绍了目前大型互联网项目的系统架构体系,相信大家应该注意到其中很重要的一块知识nginx技术,在本节博主将为大家分享nginx的相关技术以及配置过程。 一、nginx相关概念 ...

em_aaron
今天
1
0
Apache Directory Studio连接Weblogic内置LDAP

OBIEE默认使用Weblogic内置LDAP管理用户及组。 要整理已存在的用户及组,此前办法是导出安全数据,文本编辑器打开认证文件,使用正则表达式获取用户及组的信息。 后来想到直接用Apache Dire...

wffger
今天
2
0
HFS

FS,它是一种上传文件的软件。 专为个人用户所设计的 HTTP 档案系统 - Http File Server,如果您觉得架设 FTP Server 太麻烦,那么这个软件可以提供您更方便的档案传输系统,下载后无须安装,...

garkey
今天
1
0
Java IO类库之BufferedInputStream

一、BufferedInputStream介绍 /** * A <code>BufferedInputStream</code> adds * functionality to another input stream-namely, * the ability to buffer the input and to * sup......

老韭菜
今天
0
0
STM 32 窗口看门狗

http://bbs.elecfans.com/jishu_805708_1_1.html https://blog.csdn.net/a1985831055/article/details/77404131...

whoisliang
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部