Struts2实现对action请求对象的拦截操作方法

Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法。

该方法如下:

  public String execute() throws Exception

Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无参的public方法即可:

public String  xxx()

步入正文:

建立一个拦截器对象,当有客户端的请求要访问action对象的时候将会触发当前的拦截器对象,来对当前的请求数据进行过滤操作。

建立一个登录界面用于进行用户名和密码的输入操作,当登录界面当中的表单对象当中的数据提交到action类对象之前,会被拦截器对象进行拦截操作,拦截器对象会从session对象当中进行注册信息的获取操作,通过注册信息registerMessage是否为空来判断当前用户是否有权限对action类对象进行访问操作,如果registerMessage为null,则当前用户必须要先进行用户信息的注册操作,在注册页面当中将registerMessage属性变量添加到session对象当中去然后才能够去进行登录操作,访问action对象。
建立一个拦截器对象用于实现对所有访问action对象的请求数据进行拦截操作。

1:建立一个拦截器对象MyInterceptor该对象继承了抽象拦截器对象类。

2:在建立了拦截器对象之后要想进行使用首先要对该拦截器对象进行注册操作,具体的方式

是在struts.xml当中使用interceptors标签来实现拦截器的注册操作

<interceptors>
<interceptor name="MyInterceptor" class="com.interceptots.MyInterceptor"/>
</interceptors>

3:要将当前所注册的拦截器对象与指定的action类进行绑定操作,所以用interceptor

标签对象来将其所在的action类与指定的拦截器对象进行绑定操作.

<interceptor-ref name="MyInterceptor"/>

4:注意如果只绑定指定的拦截器对象就会对struts-default.xml对象当中所默认的拦截

器对象进行覆盖操作,在默认的对象当中所绑定的是一个拦截器栈,该栈当中有二十多个拦截器对

象,所以必须要对原来struts-default.xml文件当中的拦截器进行重新绑定操作.

在自定义的拦截器对象当中实现对action对象进行权限拦截操作:

用户要想实现登录来访问action对象,必须要先注册一个registerMessage信息到session对象当中才行,否则在请求访问

action对象的时候,将会被拦截器对象进行拦截操作,发现当前的session会话当中所获取到的注册信息为空时,将会返回到注册失

败的页面当中去.

登录界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!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>
 <form action="SystemAction">
  <s:textfield name="username" label="用户名"/><br>
  <s:textfield name="password" label="密码"/><br>
  <a href="register.jsp" rel="external nofollow" rel="external nofollow" >进行用户的注册</a><br>
  <a href="destroy.jsp" rel="external nofollow" rel="external nofollow" >进行用户的注销</a><br>
  当前用户名:${sessionScope.registerMessage }
  <br>
  <input type="submit" value="提交">
 </form>
</body>
</html> 

注册界面:

<%@ 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>注册页面</title>
</head>
<body>
 <%
  session.setAttribute("registerMessage","qingzhiyu");
  if(session.getAttribute("registerMessage")!=null)
  {
   %>
    <h3>注册成功</h3>
   <%
  }
 %> 

 <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >进行登录</a>
 ${sessionScope.registerMessage }
</body>
</html> 

action类实例对象:

package com.action;
/**
 *
 * @author Administrator
 *
 */
public class SystemAction {
 private String username;
 private String password; 

 /**
  * @return the username
  */
 public String getUsername() {
  return username;
 } 

 /**
  * @param username the username to set
  */
 public void setUsername(String username) {
  this.username = username;
 } 

 /**
  * @return the password
  */
 public String getPassword() {
  return password;
 } 

 /**
  * @param password the password to set
  */
 public void setPassword(String password) {
  this.password = password;
 } 

 public String execute()
 {
  System.out.println("已经进入到了系统action类当中");
  return "success";
 }
} 

拦截器对象:

package com.interceptots;
import java.util.Map;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
/**
 *
 * @author Administrator
 *自定义一个拦截器对象,该拦截器对象实现抽象类AbstractInterceptor拦截器对象
 */
public class MyInterceptor extends AbstractInterceptor{ 

 /* (non-Javadoc)
  * @see com.opensymphony.xwork2.interceptor.AbstractInterceptor#intercept(com.opensymphony.xwork2.ActionInvocation)
  *对抽象类当中的方法进行重写操作。invocation(请求,调用)
  */
 @Override
 public String intercept(ActionInvocation invocation) throws Exception {
  System.out.println("执行拦截方法");
 //从session会话对象当中进行注册信息的获取操作
  String registerMessage=(String) ActionContext.getContext().getSession().get("registerMessage");
  /*Map session=(Map)invocation.getInvocationContext().getSession();
  String registerMessage=(String) session.get("registerMessage");*/
  System.out.println("registerMessage="+registerMessage);
  if(registerMessage!=null)
  {
   //表明本次会话当中用户已经进行了信息的注册,所以拥有访问action类对象的权限,所以使用调度对象来调用action
//对象当中所指定的方法来实现业务的控制操作
   /*类似于过滤器链对象当中的chain方法实现过滤权限的转交操作*/
   String result=invocation.invoke();
   System.out.println("invocation当中的返回值为:"+result);
   return result;
  }
  else
  {//表明当前请求访问action对象的用户并没有进行信息的注册所以不具有访问action对象的权限,所以返回失败页面
   return "fail";
  }
 }
} 

拦截器对象要想使用,必须要在配置文件当中进行配置操作之后才会起作用

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>
 <package name="default-package" namespace="/" extends="struts-default">
 <!--使用interceptors标签对象来进行一个拦截器对象的注册操作-->
  <interceptors>
   <interceptor name="MyInterceptor" class="com.interceptots.MyInterceptor"/>
  </interceptors>
  <action name="SystemAction" class="com.action.SystemAction">
   <result name="success">/success.jsp</result>
   <result name="input">/login.jsp</result>
   <result name="fail">/fail.jsp</result>
   <interceptor-ref name="MyInterceptor"/>
<!--对原有的默认拦截器对象进行绑定操作-->
   <interceptor-ref name="defaultStack"/>
  </action>
 </package>
</struts> 

登录成功界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
 pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<!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>
 用户名:${username }
 <br>
 密码: ${password } 

 <br>
 <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >返回登录首页</a>
 <a href="destroy.jsp" rel="external nofollow" rel="external nofollow" >注销登录</a>
</body>
</html> 

登录失败界面:

<%@ 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>权限登录失败界面</title>
</head>
<body>
 您没有进行信息的注册,所以无权进行action对象的访问操作
 <a href="register.jsp" rel="external nofollow" rel="external nofollow" >进行用户注册</a>
 <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >返回登录界面</a>
</body>
</html> 

进行当前用户信息的注销界面:

<%@ 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>进行用户信息的注销操作</title>
</head>
<body>
 <%
  session.removeAttribute("registerMessage");
  String registerMessage=(String)session.getAttribute("registerMessage");
  if(registerMessage==null)
  {
   %>
    用户信息注销成功
   <%
  }
 %>
 <a href="login.jsp" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" >login</a>
</body>
</html> 

程序的运行结果:

登录界面

注册界面

登录成功界面:

如果没有进行用户注册直接进行登录操作

总结

以上所述是小编给大家介绍的Struts2实现对action请求对象的拦截操作方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • ajax交互Struts2的action(客户端/服务器端)

    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=G

  • struts2中action实现ModelDriven后无法返回json的解决方法

    复制代码 代码如下: public class DeviceAction extends AbstractAction implements ModelDriven<Device> {    private static Log log = LogFactory.getLog(DeviceAction.class);    private Device device=new Device(); //只能json化 模型驱动的bean    private String result; //无法

  • struts2 action跳转调用另一个程序

    目的:主要为了在一个Action成功后跳转调用另一个程序. Struts2.xml [html] 复制代码 代码如下: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.

  • 用js模拟struts2的多action调用示例

    最近修了几个struts2.1升级到2.3后动态方法调用失效的bug,深有感悟, 但是我那种原始方法有一个局限,就是在submit那里写下的action不起作用,就算启动了动态方法调用也不行(我想应该是struts2.3的一个bug),所以为了完善这个功能,这里我再说一个用js的方法. 在<s:submit value="提交" onclick="return submitAction('某某action')" />,添加onclick方法,然后再在js

  • Struts2中Action中是否需要实现Execute方法

    今天有朋友问我Struts2中Action必须实现execute方法吗?顺利的回答出来了. 其实分两种情况: 1)如果你的Action类是继承自ActionSupport或是BaseAction的话,确切的说是重写了execute方法,ActionSupport里的默认实现就是返回"success"视图.因此,你可以不实现execute方法,只要你的struts.xml里有"success"对应的result即可. <action name="doR

  • 详解在Java的Struts2框架中配置Action的方法

    在Struts2中Action部分,也就是Controller层采用了低侵入的方式.为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合.它通常更像一个普通的POJO(通常应该包含一个无参数的execute方法),而且可以在内容定义一系列的方法(无参方法),并可以通过配置的方式,把每一个方法都当作一个独立的action来使用,从而实现代码复用. 例如: package example; public class U

  • Struts2实现对action请求对象的拦截操作方法

    Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现该接口中的execute()方法. 该方法如下:   public String execute() throws Exception Struts2并不是要求所有编写的action类都要实现Action接口,也可以直接编写一个普通的Java类作为action,只要实现一个返回类型为String的无

  • js实现对ajax请求面向对象的封装

    AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新. 在js中使用ajax请求一般包含三个步骤:               1.创建XMLHttp对象               2.发送请求:包括打开链接.发送请求               3.处理响应 在不使用任何的js框架的情况下,要想使用ajax,可能需要向下面一样进行代码的编写 <span style=&qu

  • 使用RequestBodyAdvice实现对Http请求非法字符过滤

    RequestBodyAdvice对Http请求非法字符过滤 利用RequestBodyAdvice对HTTP请求参数放入body中的参数进行非法字符过滤. 要求:spring 4.2+ 额外的pom.xml <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version&

  • SpringBoot拦截器实现对404和500等错误的拦截

    今天给大家介绍一下SpringBoot中拦截器的用法,相比Struts2中的拦截器,SpringBoot的拦截器就显得更加方便简单了. 只需要写几个实现类就可以轻轻松松实现拦截器的功能了,而且不需要配置任何多余的信息,对程序员来说简直是一种福利啊. 废话不多说,下面开始介绍拦截器的实现过程: 第一步:创建我们自己的拦截器类并实现 HandlerInterceptor 接口. package example.Interceptor; import javax.servlet.http.HttpSe

  • Struts2之Action接收请求参数和拦截器详解

    技术分析之在Struts2框架中使用Servlet的API 1. 在Action类中也可以获取到Servlet一些常用的API 需求:提供JSP的表单页面的数据,在Action中使用Servlet的API接收到,然后保存到三个域对象中,最后再显示到JSP的页面上. 提供JSP注册的页面,演示下面这三种方式 <h3>注册页面</h3> <form action="${ pageContext.request.contextPath }/xxx.action"

  • JS实现对json对象排序并删除id相同项功能示例

    本文实例讲述了JS实现对json对象排序并删除id相同项功能.分享给大家供大家参考,具体如下: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>www.jb51.net json排序并删除ID相同项</title> </head> <body> <script type="text/javascript&

  • Java的Struts框架中Action的编写与拦截器的使用方法

    Struts2 Action/动作 动作是Struts2框架的核心,因为他们的任何MVC(模型 - 视图 - 控制器)框架.每个URL将被映射到一个特定的动作,它提供了来自用户的请求提供服务所需的处理逻辑. 但动作也提供其他两个重要的能力.首先,操作从请求数据的传输中起着重要的作用,通过向视图,无论是一个JSP或其它类型的结果.二,动作必须协助的框架,在确定结果应该渲染视图,在响应该请求将被退回. 创建动作: 在Struts2的动作,唯一的要求是必须有一个无参数的方法返回String或结果的对象

  • 用ASP实现对ORACLE数据库的操作

    ASP(Active Server Pages)是微软公司为开发互联网应用程序所提出的工具之一,ASP与数据库的联接一般通过ADO(Activex Data Object)来实现的,就象<计算机世界>2000年3月20日的<用ASP对SQL Server数据库操作>文章介绍的一样,ADO可以完全支持Microsoft SQL Server ,但对应用更加广泛.机制更加复杂的ORACLE 数据库服务就有一些困难,如果想作一些简单的查询功能,ADO是足够的,如要想更好地发挥ORACLE

  • C#实现对Json字符串处理实例

    本文实例讲述了C#实现对Json字符串处理方法,分享给大家供大家参考.具体分析如下: 一般对于web应用开发人员来说对Json字符串都会很熟悉,其实在很多请求我们返回的都是Json字符串.那对于C#代码如何处理Json字符串呢,.Net封装了一个类叫做JavaScriptSerializer[MSDN Library 链接:http://msdn.microsoft.com/en-us/library/ee191864(v=vs.110).aspx]:这个类提供了一个方法. 下面这个是在快递10

  • 利用JWT如何实现对API的授权访问详解

    什么是JWT JWT(JSON Web Token)是一个开放标准(RFC 7519),它定义了一种紧凑且独立的方式,可以在各个系统之间用JSON作为对象安全地传输信息,并且可以保证所传输的信息不会被篡改. 「JWT」由三部分构成 信息头:指定了使用的签名算法 声明部分:其中也可以包含超时时间 基于指定的算法生成的签名 通过这三部分信息,API 服务端可以根据「JWT」信息头和声明部分的信息重新生成签名.之所以可以这样做,是因为生成签名需要的秘钥存放在服务器端. jwtauth.New("HS2

随机推荐