干web当然,需要做的事情时,项目管理登录身份验证及其他权利。假设我们必须使用相应的登陆,未经允许是不可能的。

因此,我们需要使用拦截器,拦截功能struts2它集成。当然,有可能在Spring正在使用,这以后会写Spring时间写博客。

下一个,验证,未登陆不可以訪问一些方法:

首先,我们创建一个web项目,而且配置一些Struts2的jar包和web.xml文件。这两个就不多说了。

我们首先写一个登陆获得session的界面:index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
request.getSession().setAttribute("user", "itcast");
%>
用户已经登陆

在这个界面,我们如果用户已经登陆,而且设置了一个session

我们还要写一个退出登陆的界面:remove.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

<%
request.getSession().removeAttribute("user");
%>
用户已经退出

在这个界面,我们注销了session(也不能说是注销,由于我们仅仅是把user这个属性移除了)

然后。我们须要配置下struts.xml文件了,这里是最重要的一步:

<?xml version="1.0" encoding="GBK"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<!-- 指定Struts 2配置文件的根元素 -->
<struts> <package name="employee" namespace="/control/employee" extends="struts-default">
<interceptors>
<interceptor name="permission" class="cn.interceptor.PermissionInterceptor"></interceptor>
<interceptor-stack name="permissionStack">
<interceptor-ref name="defaultStack" />
<interceptor-ref name="permission" />
</interceptor-stack>
</interceptors> <global-results>
<result name="message">/WEB-INF/message.jsp</result>
</global-results>
<action name="list_*" class="cn.com.HelloWorldAction" method="{1}">
<interceptor-ref name="permissionStack" />
</action>
</package>
</struts>

1、<interceptors></interceptors>标签。这是定义interceptors的

2、<interceptor name="permission" class="cn.interceptor.PermissionInterceptor"></interceptor>这里定义了一个interceptor,name是permission。拦截器类是PermissionInterceptor。这个类是我们自定义的

3、<interceptor-stack name="psermissionStack"></interceptor-stack>这是定义了一个拦截器栈。假设我们为某个action设置了单个的自己定义的interceptor。将会导致Struts2的一些核心拦截器失效,所以我们须要定义一个拦截器栈,把<interceptor-ref name="defaultStack">这个Struts2的默认拦截器栈加入进去,而且放在栈顶,然后再加入进去我们自己定义的拦截器:<interceptor-ref name="permission
/>。这样子我们就能够在<action>中加入进去一个拦截器栈,而不是单一的一个拦截器。

4、<global-results>这是定义了一个全局的result视图

5、<action></action>能够看到我们在这个action插入了一个标签<interceptor-ref name="permissionStack" />这就是把我们上边定义的拦截器栈增加了进去。

在我们的struts.xml配置完毕之后。我们须要写一个拦截器类了:PermissionInterceptor.java,该类扩展了com.opensymphony.xwork2.interceptor.Interceptor接口

package cn.interceptor;

import java.util.Map;

import javax.interceptor.InvocationContext;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor; public class PermissionInterceptor implements Interceptor { @Override
public void destroy() { } @Override
public void init() { } @Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Object user = ActionContext.getContext().getSession().get("user");
if(user!=null){
return actionInvocation.invoke();
}
ActionContext.getContext().put("message", "你没有权限运行该操作");
return "message";
} }

在这个接口中。有三个方法,各自是销毁、初始化、还有详细的intercept的操作:

在intercept()方法中:我们首先通过ActionContext对象获得了user对象,假设user对象不为空(登陆),则我们return actionInvocation.invoke()。拦截器栈中兴许的拦截器继续运行。等到拦截器运行完之后,action中调用的方法就開始运行了。假设对象为空,我们设置message。而且返回message视图。

接下来,我们要给action定义对应的逻辑处理类:

package cn.com;

public class HelloWorldAction {
private String message; public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
}
public String addUI(){
this.message="addUI";
return "message";
}
public String execute() throws Exception{
this.message="execute";
return "message";
}
}

在上边调用拦截器之后。假设我们return actionInvocation.invoke(),则我们会运行这个逻辑类中对应的方法,假设我们调用了execute()方法,我们会运行这种方法中的逻辑处理,然后。返回message视图。

然后。我们来写一下message相应的视图:message.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>
<%
String user = (String)request.getSession().getAttribute("user");
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>My JSP 'message.jsp' starting page</title> </head> <body>
${message }
<%=user %>
</body>
</html>

这是我们项目的project文件夹:

假设我们首先输入:http://localhost:8080/test/control/employee/list_execute.action,这是要訪问execute()方法,在页面中会打印出:你没有权限运行该操作 null

假设我们输入:http://localhost:8080/test/index.jsp,页面上会打印出:用户已经登陆

然后,我们再输入:http://localhost:8080/test/control/employee/list_execute.action。页面上会打印出:execute itcast

可以看出来,我们的拦截器起作用了:在不登陆的情况下。我们不可以訪问对应的方法

版权声明:本文博主原创文章。博客,未经同意不得转载。

【SSH三框架】Struts2第六章的基础:他们拦截函数的定义的更多相关文章

  1. 【windows核心编程】 第六章 线程基础

    Windows核心编程 第六章 线程基础 欢迎转载 转载请注明出处:http://www.cnblogs.com/cuish/p/3145214.html 1. 线程的组成 ①    一个是线程的内核 ...

  2. 【SSH三框架】Struts2第一章的基础:第一次写Struts2规划

    今年八月,当已经SSH三架完成学业.然后,他感动Android开展.三个框架已经很长的时间做无用的东西.所以,如果你想花三四天的时间来复习一下,写在博客. 附带SSH整个jar包网盘下载:http:/ ...

  3. 旧书重温:0day2【9】第六章 攻击c++的虚函数

    不知不觉,我们学到了0day2的第六章形形色色的内存攻击技术!其中,这张很多东西都是理论的东西,不过!我们还是要想办法还原下发生的现场! 其中部分文章截图 http://user.qzone.qq.c ...

  4. Windows核心编程 第六章 线程基础知识 (上)

    第6章 线程的基础知识 理解线程是非常关键的,因为每个进程至少需要一个线程.本章将更加详细地介绍线程的知识.尤其是要讲述进程与线程之间存在多大的差别,它们各自具有什么作用.还要介绍系统如何使用线程内核 ...

  5. Windows核心编程 第六章 线程基础知识 (下)

    6.6 线程的一些性质 到现在为止,讲述了如何实现线程函数和如何让系统创建线程以便执行该函数.本节将要介绍系统如何使这些操作获得成功. 图6 - 1显示了系统在创建线程和对线程进行初始化时必须做些什么 ...

  6. 【WPF学习】第三十六章 样式基础

    前面三章介绍了WPF资源系统,使用资源可在一个地方定义对象而在整个标记中重用他们.尽管可使用资源存储各种对象,但使用资源最常见的原因之一是通过他们的保存样式. 样式是可应用于元素的属性值集合.WPF样 ...

  7. 用最简单话概括SSH三框架

    Hibernate用来做持久层,因为它将JDBC做了一个良好的封装,程序员在与数据库进行交互时可以不用书写大量的SQL语句. Struts是用来做应用层的,他它负责调用业务逻辑serivce层,所以S ...

  8. Artech的MVC4框架学习——第六章Model的验证

    第一Model验证旨在为通过Model绑定生成参数进行检验以确保用户输入数据的有效性(p318) 第二Model验证分两种:服务器端(三种解决方案 p256)和客户端(ajax\jQuery) 第三服 ...

  9. 【SSH三框架】Hibernate基金会七:许多附属业务

    相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系.但也有许多关系. 但,只知道它是不够的,Hibernate它是一种面向对 ...

随机推荐

  1. div整体布局分析

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 精通Django或Rails框架

    Django是一个开放源代码的Web应用框架,由Python写成. Rubyon Rails 是一个用于开发数据库驱动的网络应用程序的完整框架.

  3. Namespace declaration statement has to be the very first

    Namespace declaration statement has to be the very first statement in the script 我新建了一个Homea模块,并把Hom ...

  4. 关于char与varchar,varchar2的区别

    http://zhidao.baidu.com/question/220360696.html?qbl=relate_question_0&word=char%BA%CDvarchar2%B5 ...

  5. Centos 5.5下安装samba

    1.安装: Centos 5.5下安装samba,具体步骤如下: [root@bogon ~]# rpm -q samba Package samba is not installed [root@b ...

  6. access 2007 vba 开发中学到的知识(三)

    打开文件或程序 'API函数声明Public Declare Function ShellExecute Lib "shell32.dll" Alias "ShellEx ...

  7. delphi : 取得网页源码内容

    取得网页的源码内容的函数以及调用方法供大家参考: program geturl; uses wininet, windows; //取网页内容 function StrPas(const Str: P ...

  8. 【创建型】Singleton模式

    单例模式可以说是所有23种设计模式中最为简单的一个,没有之一.其主要思想就是保证整个应用环境中,最多只会有一个对象的实例.类关系图参考如下: 在c++中,单例模式的实现,较为常用的实现方式一般为: n ...

  9. Swift—使用try?和try!区别-备

    在使用try进行错误处理的时候,经常会看到try后面跟有问号(?)或感叹号(!),他们有什么区别呢? 1.使用try?  try?会将错误转换为可选值,当调用try?+函数或方法语句时候,如果函数或方 ...

  10. C#控制生成图片的大小

    private void button1_Click(object sender, EventArgs e) { using (Bitmap bitmap = new Bitmap("d:\ ...