南昌航空大学实验报告Struts拦截器实验权限的验证
通过struts2拦截器实现权限管理
123. return "noPermit";
124. }
125.
126. }
127.
128.
129.
27.
28.
29. @Override
30. public String intercept(ActionInvocation invocation) throws Exception {
31. // 取得请求的Action名
32. String name = invocation.getInvocationContext().getName(); // action
97. boolean flag = false;// 如果有权限访问设置为true;
98. int userLen = userRoles.size();
99. int urlLen = urlRoles.size();
100. QxglRole tempUserRole = null;
37. if ("/".equals(namespace.trim())) {
38. // 说明是根路径,不需要再增加反斜杠了。
39. } else {
40. namespace += "/";
62. log.debug("please login");
63. return Action.LOGIN;
64. }
65.
66. String userid = (String) session.get("userid");
软件开发框架(J2EE)Struts 2拦截器实训指导书
《软件开发框架(J2EE)》课程实训(验)项目单编制部门:编制人:审核人: 编制日期: 2015年9月 7日四、评分标准1.操作规范(20%)2.完成使用拦截器检测用户登录程序开发(50%)3.实训报告(30%)《软件开发框架(J2EE)》课程实训(验)项目单编制部门:编制人:审核人: 编制日期: 2015年9月 7日内容(方法、步骤、要求或考核标准)一、实训设备与工具1.PC机(内存512M以上)2.MyEclipse、JDK、Tomcat、Struts 2框架、浏览器二、实训项目描述当我们签收了在网上购买的商品后,可以对该商品的质量、性价比等进行评价。
为了尊重卖家,要求用户在评语中不能出现“人品差”字样。
如果出现该字样,则需要系统实现对文字的过滤,并使用“*”号来代替。
三、实训步骤、方法与要求1 在com.mxl.actions包中创建ContentAction类2 在com.mxl.interceptor包中创建ContentInterceptor类,该类为过滤文字的拦截器类3 在struts.xml文件中配置ContentInterceptor拦截器,并在ContentAction类的配置中使用该拦截器4 在struts.xml文件中配置自定义拦截器类LoginInterceptor,并在配置Action时引用该拦截器5 在WebRoot目录下新建content_send.jsp页面。
该页面用于用户发表评论6 在WebRoot目录下新建content_success.jsp页面,当评论成功后返回该页面7 运行结果1)将Web应用ch3部署到Tomcat服务器上,然后启动Tomcat服务器。
2)打开浏览器,在地址栏输入http://localhost:8080/ch3/content_send.jsp,显示发表评论界面。
3)输入评论人和评论正文信息,单击【立即发表评论】按钮,自定义过滤器对其发表的评论进行文字过滤,使用“*”号替换“人品差”。
Struts2拦截器登陆验证详细例子
Struts2拦截器登陆验证详细例子本文章适应对象:初学者,或者学struts2入门的人员引言:很实用的,运行过的,能运行成功的。
把相关的代码拷贝到工程目录下,相应的配置文件配置好,有解释的。
关键的代码如下:1、http://localhost:8083/struts2/user.jsp 表示用户已登陆,存放session对象2、http://localhost:8083/struts2/quit.jsp 表示用户已退出,移除session对象3、http://localhost:8083/struts2/login/addUIHelloWorld ...1、<http://localhost:8083/struts2/user.jsp> 表示用户已登陆,存放session对象2、<http://localhost:8083/struts2/quit.jsp> 表示用户已退出,移除session对象3、<http://localhost:8083/struts2/login/addUIHelloWorld.do> 如果session存在则往下执行,否则提示“你没有权限执行该操作”4、<http://localhost:8083/struts2/login/executeHelloWorld.do> 如果session存在则往下执行,否则提示“你没有权限执行该操作”代码user.jsp页面<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%request.getSession().setAttribute("user", "ljq");%>用户已经登录quit.jsp页面<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%request.getSession().removeAttribute("user");%>用户已经退出登录Action类package com.ljq.action;public class HelloWorldAction {private String message;public String addUI() {this.message = "addUI";return "success";}public String execute() throws Exception { this.message = "execute";return "success";}public String getMessage() {return message;}public void setMessage(String message) { this.message = message;}}权限类package com.ljq.interceptor;import com.opensymphony.xwork2.ActionContext;import com.opensymphony.xwork2.ActionInvocation;import com.opensymphony.xwork2.interceptor.Interceptor;/*** 限制没有登录的用户进入访问页面** @author jiqinlin**/@SuppressWarnings("serial")public class PermissionInterceptor implements Interceptor {public void destroy() {}public void init() {}public String intercept(ActionInvocation invocation) throws Exception { Object user = ActionContext.getContext().getSession().get("user");// 如果user不为null,代表用户已经登录,允许执行action中的方法if (user != null){return invocation.invoke();}ActionContext.getContext().put("message", "你没有权限执行该操作");return "success";}}struts.xml配置文件<?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><constant name="struts.i18n.encoding" value="UTF-8" /><constant name="struts.enable.DynamicMethodInvocation" value="false" /> <constant name="struts.action.extension" value="do" /><package name="login" namespace="/login" extends="struts-default"> <interceptors><!-- 自定义拦截器--><interceptor name="permission" class="com.ljq.interceptor.PermissionInterceptor" /><!-- 配制默许的拦截器到拦截器栈--><interceptor-stack name="permissionStack"><!-- 此处先后顺序好像没影响哦,我尝试过是没影响的--><interceptor-ref name="permission" /><interceptor-ref name="defaultStack" /></interceptor-stack></interceptors><!-- 配置默认的拦截器--><default-interceptor-ref name="permissionStack" /><!-- 全局变量--><global-results><result name="success">/WEB-INF/page/message.jsp</result> </global-results><action name="*HelloWorld" class="com.ljq.action.HelloWorldAction"method="{1}"><!-- <interceptor-ref name="permissionStack" /> --> </action></package></struts>。
Struts2全部实验报告
实验时间2015年11月6日19:00时至22:00时学时数 4 1.实验名称实验一:熟悉Struts2核心文件2.实验目的(1)熟悉Struts2的配置文件web.xml和struts.xml。
(2)熟悉如何书写用户定义的控制器。
(3)深刻理解DMI和通配符的使用。
(4)学会struts2接收参数的方法。
3.实验内容(1)将如下页面中登陆和注册的action配置用通配符实现。
(2)理解局部结果和全局结果,学会在struts.xml 中配置全局结果。
(3)实现增加书籍信息的业务处理。
(4)修改管理员登陆后的页面并新写页面addBook.jsp,使得点击添加书籍信息后呈现下面的页面4.实验原理或流程图要求:➢管理员登录后跳到管理员登陆成功的页面➢普通用户登录后跳到普通用户登陆成功的页面➢注册后跳到注册成功的页面➢登录时用户名密码输入错跳到出错页➢注册和登录时用户名,密码没有输入时跳到登陆注册页,并在登陆注册页上显示校验失败的相关提示。
要求如下:➢当输入书名,作者和定价后,要求使用属性驱动、模型驱动或今天新学的接收参数的方法进行参数接收。
➢使用集合模拟数据库。
➢理解chain结果类型,使得增加书籍后马上能将新增书籍的信息显示出来。
呈现出如下的页面:(注意:此处需要学会读取struts2中ValueStack中的内容)5.实验过程或源代码6.实验结论及心得通过本此实验,知道了Action配置采用通配符的方式该如何编写,也会了动态调用Action里面的方法,懂得了全局结果的配置,也会使用了接受参数的方法。
项目名称/login.jsp,查看运行结果。
(3)使用内置校验器进行校验项目3:用户注册验证。
步骤1:register.jsp文件步骤2:Register.java文件步骤3:新建 Register-register-validation.xml文件步骤4:struts.xml文件步骤5:运行程序,URL地址栏中输入http://主机名:端口名称/项目名称/register.jsp,查看运行结果。
实验六 Struts2开发(二)
实验五Struts 2开发(二)【实验目的】:1.进一步掌握Struts应用程序开发的步骤2.理解拦截器的机制和作用3.掌握拦截器的开发、配置和引用。
4.理解如何使用Struts2框架实现文件上传和下载。
【实验内容】:开发和使用拦截器;利用Struts 2框架实现文件上传。
【实验步骤】:(一) 拦截器的使用拦截器是动态拦截Action调用的对象。
它提供一种机制,使开发者可以定义一段代码,在Action执行之前或之后被调用执行,也可以在一个Action执行前阻止其执行。
同时也提供了一种可以提取Action中可重用部分的方式。
Struts 2设计的灵巧性,很大程度上得益于拦截器设计,拦截器几乎完成了Struts 2框架70%的工作,包括解析请求参数、将请求参数赋值给Action属性、执行数据校验、文件上传等。
当需要扩展Struts 2功能时,只需要提供对应拦截器,并将它配置在Struts 2容器中即可,如果不需要该功能,也只需取消该拦截器的配置即可。
Struts 2内建了大量的拦截器,这些拦截器以name-class对的形式配置在struts-default.xml文件中。
打开此文件,观察其结构和内容。
simpleInterceptor应用程序的开发步骤(1)在MyEclipse的workspace中新建Web工程simpleInterceptor。
导入Struts2开发需要用到的类库。
其目录结构如下:(2)将Struts 2框架的支持类文件复制到WebRoot/WEB-INF/lib目录下。
(3)创建包org.crazyit.app.action包,其下建立Action类LoginAction。
当用户访问login.jsp页面时,如果输入用户名:101031.2 密码:student。
LoginAction执行完后将返回SUCCESS视图。
其代码如下:package org.crazyit.app.action;import com.opensymphony.xwork2.ActionSupport;public class LoginActionextends ActionSupport{private String username;private String password;//username的setter和getter方法public void setUsername(String username){ername = username;}public String getUsername(){return username;}//password的setter和getter方法public void setPassword(String password){this.password = password;}public String getPassword(){return password;}public String execute() throws Exception{System.out.println("进入execute方法执行体..........");Thread.sleep(1500);if (getUsername().equals("SE")&& getPassword().equals("student") ){return SUCCESS;}else{return ERROR;}}}(4)创建包org.crazy.app.interceptor包,其下建立拦截器类SimpleInterceptor。
STRUTS2实验报告
STRUTS2实验报告1. 系统分析与设计 1.1 系统功能描述本系统是个非常简单的注册、登录系统。
本系统的实现是基于struts2、spring、hibernate三个框架,系统功能单一,业务逻辑简单。
当用户注册信用户时,就是向系统中增加一个新用户,对应的数据库增加一条记录。
当用户输入注册信息时,系统提供了基本的输入验证判断用户输入是否合法,只有当用户输入满足基本输入要求时,才会被提交到实际的登录系统,进行实际的登录处理。
系统还使用了随机产生的图形验证码来防止刷新,防止用户通过单击浏览器的书安心按钮来重复注册多个用户。
系统还提供了一种ajax方式来验证用户输入的注册名是否有效,系统要求所有的用户名不能重复。
故当用户输完用户名后,系统立即在页面上方提示用户该用户名是否可用,如果系统中没有该用户名,则系统提示该用户名可用;否则提示用户该用户名重复,用户必须重新选择用户名注册。
当用户注册一个新用户名之后,就可以使用系统的登录功能来登录系统了,用户输入登录用的用户名、密码后,系统一样提供了基本的输入校验。
除此之外,系统还采用了随机产生图形验证码来防止恶意用户的暴力破解,系统随机生成一个图形验证码,而用户登录必须输入图形验证码中显示的字符串,只有用户输入的字符串和系统随机生成的验证码字符相同时,系统才允许用户登录。
1.2 系统功能流程1.3 数据库设计相关的映射文件:<hibernate-mappingpackage= <classname=user table=user_table> <id name=idcolumn=user_id> <generatorclass=identity</id> nique=true/><propertyname==user_passnot-null=true length=50/> <propertyname=emaillength=100/> </class> <propertyname=usercolumn=</hibernate-mapping> 一旦提供了上面的映射文件,hibernate就可以理解user和user_table之间的对应关系。
Struts2拦截器及其用法说明
prepare
如果action实现Preparable接口,将会调用该拦截器的prepare()方法
Profiling Interceptor
【概要拦截器】
profiling
允许action记录简单的概要信息日志
Scope Interceptor
【作用域拦截器】
scope
这是范围转换拦截器,它可以将Action状态信息保存到HttpSession范围,或者保存到ServletContext范围内。
token
org.apache.struts2.interceptor.TokenInterceptor
tokenSesห้องสมุดไป่ตู้ion
org.apache.struts2.interceptor.TokenSessionStoreInterceptor
validation
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor
Token Interceptor
【令牌拦截器】
token
检查action的合法令牌,以防止重复提交表单,当表单被多次提交时,跳转到一个错误页面
Token Session Interceptor
【令牌会话拦截器】
tokenSession
功能与令牌拦截器相同,但是对于非法令牌,提交的数据将保存在会话中,不跳转到错误页面,再次生成与第一次相同的页面。
【消息存储拦截器】
store
在会话中为action存储和检索消息、字段错误以及action错误,该拦截器要求action实现ValidationAware接口
struts2实验
(一)S truts2 框架和拦截器编程一、目的1)熟悉Struts2框架编程2)了解熟悉Struts2中拦截器框架的使用,利用拦截器进行一些常见动作的拦截处理。
二、实验要求✧完成Struts2框架编程,实现登陆验证。
✧利用Struts2拦截器实现一个用户权限判断的过程。
三、实验步骤1.编写LoginInterceptor.java,LoginAction.Java;2.编写Error.jsp,Success.jsp,Login.jsp;3.配置structs.xml;要求:首先实现Struts2框架编程,然后再完成基础上添加拦截器编程。
参考代码:附件中。
四、实验总结1、简述Struts 2框架流程。
(1)导入struts2的jar(2)配置web.xml(3)写一个action 继承actionSupport(4)在jsp上写一个form访问action。
(5)配置struts.xml 把action配置上2、拦截器和过滤器的区别。
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次拦截器:是在面向切面编程的就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。
过滤器:是在javaweb中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.3、拦截器的工作原理。
Struts2的拦截器总结
Struts2 中的拦截器和servelt 中的过滤器是非常的相似的。
如果学过过滤器的话,肯定能够感觉的到,尽管有些微的不同。
可是struts2的拦截器到底如何使用呢,为什么会有这些配置呢?接下来一一来看。
过滤器和拦截器是非常相似的,过滤器public interface Filter 接口里面有三个方法:∙init(FilterConfig filterConfig),∙destroy(),∙doFilter(ServletRequest request, ServletResponse response, FilterChain chain), 这里面的doFilter() 方法是最重要的,在struts2 中String intercept(ActionInvocation invocation)就相当于此方法。
如何完成一个拦截器呢?在struts2 中要实现一个接口这个接口是什么呢?在哪呢?,是否在哪听说过?是webwork 是我们以前听的最多的关于拦截器的框架,struts2 用了其中一个核心的东西,这个东西在是什么呢?是xwork 。
恩,有了它才可以拦截,好了我们在哪找呢?在com.opensymphony.xwork2.interceptor 中找,里面有个Interceptor 这是个接口,里面也有三个方法,有init,destroy 和intercept 三个方法,而在struts2 里面的所有的拦截器都继承这个接口!为了看这些是怎么实现的,加入了一些打印!将上面的配置整合起来就是:这样就可以让Aciton 被拦截了,到此,好了,可以运行程序了:输出结果是:启动服务器init 被打出运行后提交action 输出intercept这个就是初步的一个拦截器。
=======在此可能出现一个问题,是什么呢?如果就我们做的注册程序而言,可以想一下,有数据转换,有数据校验,以前当转换和校验不符合的时候,点击提交,会提示相关错误信息,然而,此时当转换和校验依然不符合要求时,点击提交,却不会提示错误信息,为什么呢?====当然你答对了,这些功能都包含在struts2的默认拦截器中,这里没执行是被添加的拦截器myinterceptor取代了。
struts2拦截器实现用户登录权限的验证
@Override
@SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception
{
Map map = invocation.getInvocationContext().getSession();//jsp登录页面将用户登录的信息存在一个session中
public String execute() throws Exception
{
if ("hell)
&& "world".equals(this.getPassword().trim()))
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
public class AuthInterceptor extends AbstractInterceptor
{
return Action.LOGIN;
}
else
{
return invocation.invoke(); //若有登录信息就继续执行其他拦截器的代码
}
}
}
步骤二 在登录的action类中将用户的登录的信息注入session中,如下代码:
{
Map map = ActionContext.getContext().getSession();
map.put("user","valid");//这里将随意的一个字符串放在session的Key(user)中,
Struts中实现拦截、校检、类型转换功能
实验四--在Struts中实现拦截、校检、类型转换功能一.问题描述实验内容:尝试了解Struts2基本配置,并实现拦截器、校验、类型转换三个部分的功能。
分别制作一个简易的登录和注册页面,对于注册页面进行输入参数的校验和类型转换,在WEB-INF的content文件夹中放置一个viewContent.jsp的页面,使得只有通过权限拦截器的访问才能够跳转到该页面。
二.程序设计与分析1.导入项目:打开Eclipse,F ile>>Import>>General>>Existing Projects int oWorkspace,选择程序放置的地方,选择程序Struct2Demo后,点击OK。
2.首先配置好struts2环境,需要在项目中增加struts.xml配置文件以及在项目中增加所需要的jar包就可以了。
3.拦截器:创建一个叫做AuthorityInterceptor.java的拦截器。
当需要访问V iewAction的时候,AuthorityInterceptor拦截器会首先检查session中是否存在user_name这一个参数以检查该用户是否已经登录。
如果已经登录,则跳转到该页面;如果还没有登录,则跳转到登录页面。
struts2自带的拦截器我们也需要加上去。
但由于自定义的默认拦截器只能是一个,所以需要把AuthorityInterceptor拦截器和struts2自带的拦截器封装在拦截器栈当中。
拦截器伪代码://创建一个叫做AuthorityInterceptor.java的拦截器......//检查用户名是否存在,并判断是否已登录.....ActionContext ctx = invocation.getInvocationCont ext();Map<String, Object> session = ctx.getSession();String user_name = (String) session.get("user_name");//当注册页面的用户名存在,并且该账号已登录时,切换改界面//未经登录时,跳转到登录界面}接下来在Struct.xml中定义拦截器://定义权限拦截器{.... }//定义权限拦截器栈:把AuthorityInterceptor拦截器和struts2自带的拦截器封装在拦截器栈当中{.... }//定义默认拦截器{..... }4.在登录和注册页面中,如果用户成功登录或者注册,则在后台中把一个叫做user_name的参数添加到session中以作为成功登录的标识。
Struts 2拦截器的研究与应用
Struts 2拦截器的研究与应用【摘要】本文旨在探讨Struts 2拦截器的研究与应用。
在将介绍拦截器的基本概念和作用。
接着,正文部分将从拦截器的概述、工作原理、分类、应用场景和配置方法等方面进行详细讨论。
通过对Struts 2拦截器的全面分析,读者能够深入了解其在Web开发中的重要性和作用。
在结论部分将对全文进行总结,概括出拦截器的核心要点,并展望未来对拦截器的进一步研究和应用方向。
通过本文的阐述,读者能够全面掌握Struts 2拦截器的相关知识,为其在实际项目开发中的运用提供指导和参考。
【关键词】Struts 2,拦截器,研究,应用,概述,工作原理,分类,应用场景,配置方法,总结,展望1. 引言1.1 引言在软件开发领域,拦截器是一个常见的概念。
在Struts 2框架中,拦截器起着至关重要的作用,可以对请求进行处理、拦截和转发,实现灵活的业务逻辑控制。
本文将对Struts 2拦截器进行研究与应用,探讨其工作原理、分类、应用场景以及配置方法。
我们将从概述入手,介绍Struts 2拦截器的基本概念和作用。
然后,我们将深入探讨其工作原理,解释拦截器是如何在Struts 2框架中起作用的。
接着,我们将分析不同类型的拦截器及其特点,以及在实际开发中的应用场景和效果。
我们将详细讨论如何配置和使用Struts 2拦截器,以便开发人员能够更好地利用其强大功能。
通过本文的研究与应用,读者将能够全面了解Struts 2拦截器的原理和用法,掌握其灵活性和实用性,从而更好地进行软件开发工作。
希望本文能对读者有所帮助,引起他们对Struts 2拦截器的兴趣,为他们的开发工作提供一些参考和指导。
2. 正文2.1 Struts 2拦截器的概述Struts 2拦截器是在Struts 2框架中非常重要的组件,它负责拦截客户端请求,并在请求到达目标Action之前或之后执行相应操作,比如验证用户权限、记录日志、设置字符编码等。
实验三-Struts框架编程-实验分析报告纸
实验三-Struts框架编程-实验报告纸————————————————————————————————作者:————————————————————————————————日期:南京信息工程大学实验(实习)报告实验(实习)名称 Struts2框架编程实验(实习)日期得分指导教师院计软专业计科年级 2013级班次 3 姓名张文娇学号 201313080811.实验目的:1)掌握Struts2框架和工作流程。
2)熟悉Struts标签库的使用。
3)掌握Struts 2拦截器的原理,并能进行相关设置和编程。
4)了解和掌握文件上传等功能实现2.实验内容:1)采用Struts2框架,创建三个JSP页面(hello.jsp、welcome.jsp)和一个Action实现类(StrutsAction),并对web.xml和Struts.xml进行必要配置,实现用户登录功能的处理。
(参考教材3.1节)2)采用Struts2相关技术,实现“学生综合管理系统”的“添加学生信息”功能(具体需求详见教材3.7所述)3.实验步骤{对每个实验题目进行简要步骤描述,包括源码和实验结果截图}1)1.启动MyEclips 8.52.创建web project项目命名为FirstStruts23.添加支持包4.配置web.xml<filter><filter-name>struts2.0</filter-name><filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class></filter><filter-mapping><filter-name>struts2.0</filter-name><url-pattern>/* </url-pattern></filter-mapping>5.在工程中创建LoginAction.jspimport dao.CustomerDAO;public class LoginAction {private String name;private String password;/**在此方法里实现业务逻辑处理*/public String execute() throws Exception {CustomerDAO dao=new CustomerDAO();boolean boo=dao.check(name, password);if(boo)return "success";elsereturn "error";}public String getName() { return name; }public void setName(String name) { = name; }public String getPassword() { return password; }public void setPassword(String password) {this.password = password;}}6.配置struts.xml文件<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="default" extends="struts-default"><action name="login" class="abc.LoginAction"><result name="success">/success.jsp</result><result name="error">/error.jsp</result></action></package></struts>7.创建login.jsp<body><form action="login.action">用户名:<input name="name"/><br/>密码:<input type="password" name="password"/><br/><input type="submit" value="提交"/></form></body>8.创建success.jsp与error.jsp9.连接MYSQLEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 1Server version: 5.1.34-community MySQL Community Server (GPL)Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> create database mydb;Query OK, 1 row affected (0.01 sec)mysql> use mydb;Database changedmysql> create table customer(-> name char(20),-> password char(20));Query OK, 0 rows affected (0.08 sec)mysql> insert into customer values('sa1','admin');Query OK, 1 row affected (0.03 sec)mysql> insert into customer values('kate','123');Query OK, 1 row affected (0.02 sec)mysql>10.创建CustomerDAOpublic class CustomerDAO {public boolean check(String name,String password){try{Class.forName("com.mysql.jdbc.Driver");Connectioncon=DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb","root","");Statement state=con.createStatement();String sql="select * from customer where name='"+name+"' and password='"+password+"'";ResultSet rs=state.executeQuery(sql);if(rs.next()){return true;}}catch(Exception e){e.printStackTrace();}return false;}}2)实验内容1、建立数据库2、建立Web项目3、加载Struts 2的基本类库4、修改web.xml5、建立stu.jsp文件<%@ page language="java" pageEncoding="utf-8"%><%@ taglib uri="/struts-tags" prefix="s"%><html><head><s:head /></head><body ><h3>添加学生信息</h3><s:form action="save.action" method="post" theme="simple"><table><tr><td>学号:</td><td><s:textfield name="xs.xh"></s:textfield></td></tr><tr><td>姓名:</td><td><s:textfield name="xs.xm" ></s:textfield></td></tr><tr><td>性别:</td><td><s:radio name="xs.xb" list="#{1:'男',2:'女'}"value="1"></s:radio></td></tr><tr><td>专业:</td><td><s:textfield name="xs.zy" label="专业"></s:textfield></td></tr><tr><td width="70">出生时间:</td><td><s:datetimepicker name="xs.cssj" id="cssj"displayFormat="yyyy-MM-dd" ></s:datetimepicker></td> </tr><tr><td> 备注:</td><td><s:textarea name="xs.bz" label="备注"></s:textarea></td></tr><tr><td><s:submit value="添加"></s:submit></td><td><s:reset value="重置"></s:reset></td></tr></table></s:form></body></html>6、建立表对应的JavaBean和DBConn类package org.work;import java.sql.*;import org.model.Xsb;public class DBConn {Connection conn;PreparedStatement pstmt;public DBConn(){try{Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");conn=DriverManager.getConnection("jdbc:sqlserver://localhost:1433;" +"databaseName=XSCJ","liuyanbo","123456");}catch(Exception e){e.printStackTrace();}}// 添加学生public boolean save(Xsb xs){try{pstmt=conn.prepareStatement("insert into XSB values(?,?,?,?,?,?)");pstmt.setString(1, xs.getXh());pstmt.setString(2, xs.getXm());pstmt.setByte(3, xs.getXb());pstmt.setString(4, xs.getZy());pstmt.setDate(5, xs.getCssj());pstmt.setString(6, xs.getBz());pstmt.executeUpdate();return true;}catch(Exception e){e.printStackTrace();return false;}}}7、建立Action类SaveActionpackage org.action;import org.model.Xsb;import org.work.DBConn;import com.opensymphony.xwork2.ActionSupport;public class SaveAction extends ActionSupport{private Xsb xs;public Xsb getXs() {return xs;}public void setXs(Xsb xs) {this.xs=xs;}public String execute() throws Exception {DBConn db=new DBConn();Xsb stu=new Xsb();stu.setXh(xs.getXh());stu.setXm(xs.getXm());stu.setXb(xs.getXb());stu.setZy(xs.getZy());stu.setCssj(xs.getCssj());stu.setBz(xs.getBz());if(db.save(stu)){return SUCCESS;}elsereturn ERROR;}}8、创建并配置struts.xml<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE struts PUBLIC"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN""/dtds/struts-2.0.dtd"><struts><package name="default" extends="struts-default"><action name="save" class="org.action.SaveAction"><result name="success">/success.jsp</result><result name="error">/stu.jsp</result></action></package></struts>9、创建success.jsp页面<%@ page language="java" pageEncoding="utf-8"%><html><head></head><body>恭喜你,添加成功!</body></html>10、部署运行4.实验分析和总结{进行本实验的分析,总结收获和经验}此次实验使是我们了解了struts程序的基础操作,其中发现许多不足的地方。
Struts 2的拦截器
5
Struts2综合实验报告
沈阳工学院综合实验验收报告题目:论坛系统的设计与实现院系:信息与控制学院专业:计算机科学与技术班级学号: 11301203 11301103 11301228 学生姓名:韩雨辰赫梓屹田皓指导教师:靳新成绩:2013年 12 月 15 日综合实验论坛系统的设计与实现【开发语言及实现平台或实验环境】Windows系统,JDK,myEclipse开发环境,Tomcat服务器,Struts2、Hibernate开发平台【实验要求和内容】论坛系统是用于用户之间交流的一个信息平台,它是网站开发中很典型的一个例子,通过网上论坛系统的设计和开发掌握Struts2和Hibernate实现的基本功能。
●系统基本功能系统分为前台和后台,分别为用户和管理员提供不同的功能服务,对普通用户来说,系统提供注册、登录、浏览信息、发帖、回贴等功能;对管理员来说,系统提供登录验证、管理帖子、管理用户等功能。
●系统功能模块及介绍论坛系统的设计与实现前台用户模块后台管理员模块用户注册登录模块信息浏览模块发帖回帖模块管理员登录验证模块帖子管理模块管理用户模块图1 系统功能模块图♦前台用户模块(1)用户注册登录模块:为新用户提供填写表单注册成为会员的服务;为已注册的会员提供登录验证的服务,验证成功后就可以登录系统。
(2)信息浏览模块:用户可以浏览帖子列表、详细内容及回帖内容。
(3)发帖回帖模块:已登录的合法用户可以发帖和回帖。
♦后台管理员模块(1)管理员登录验证模块:对管理员的身份进行验证,只有管理员才能登录后台。
(2)帖子管理模块:对帖子提供修改、删除操作。
(3)管理用户模块:提供删除用户的功能。
1 系统分析与设计1.1 需求分析1.1.1 功能性需求开发BBS论坛系统的目的是提供一个供用户交流的平台,为广大用户提供交流经验、探讨问题的社区。
因此,BBS论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。
此外,为了记录主题的发表者和主题的加复者信息民,系统还需要提供用户注册和登录的功能。
Struts 2拦截器的研究与应用
Struts 2拦截器的研究与应用Struts 2是一个开源的Java Web应用程序框架。
它是MVC(Model-View-Controller)框架的一种实现,它可以帮助开发人员快速构建灵活和可维护的Web应用程序。
Struts 2拦截器是在Web请求的流程中,拦截控制器和Action等结构组件的执行过程中实现自定义处理的一种机制。
Struts 2框架在执行Action前后提供了很多的拦截器(Interceptor),我们可以通过自定义拦截器实现更灵活的处理。
Struts 2拦截器主要作用是处理控制器和Action等结构组件的执行过程。
对于Web应用程序,请求的处理通常会涉及到以下步骤:1. 请求到达服务器并被Servlet容器接收。
2. Servlet容器将请求发送给Struts2框架。
3. Struts2框架使用ActionContext对象包装请求。
4. Struts2框架使用拦截器链来处理请求。
5. 如果所有拦截器都成功运行,就会执行Action。
6. Action返回结果给Struts2框架。
7. Struts2框架呈现结果给客户端。
可以看出,拦截器在Struts2框架中占据着非常重要的位置。
它们可以对Struts2框架的请求流程进行干预和修改,执行一些通用的、与业务逻辑无关的操作,例如权限判断、登录验证、日志记录等。
拦截器的实现在Struts2中,拦截器是在struts.xml中配置的,每个拦截器都有一个名字和一个类名。
下面是一个拦截器的配置例子:```xml<interceptor name="loginInterceptor" class="com.example.LoginInterceptor" />```以上配置中,interceptor标签用于声明一个拦截器,name属性指定拦截器的名字,class属性指定拦截器的实现类。
详解Struts2拦截器机制
详解Struts2拦截器机制Struts2的核⼼在于它复杂的拦截器,⼏乎70%的⼯作都是由拦截器完成的。
⽐如我们之前⽤于将上传的⽂件对应于action实例中的三个属性的fileUpload拦截器,还有⽤于将表单页⾯的http请求参数设置成action中对应的属性的param拦截器等。
总之,在整个Struts框架中拦截器的作⽤是相当⼤的,本篇将从以下⼏点详细介绍下有关Struts拦截器的内容:拦截器在Struts中的作⽤⾃定义拦截器实现类配置拦截器(包含配置默认拦截器)引⽤拦截器配置拦截指定⽅法的拦截器拦截器的拦截顺序⼀、拦截器在Struts中的作⽤在我们的web.xml中,我们配置了⼀个过滤器,实现将所有请求交付StrutsPrepareAndExecuteFilter类。
⼀旦接受到任意action的请求,该类会创建和初始化⼀个ActionProxy实例,它代理了具体的action,在其中我们可以添加任意拦截器在execute⽅法执⾏之前和之后做⼀些额外的操作,最终会调⽤该action实例的execute⽅法,为⽤户返回视图结果字符串,然后系统会根据该视图结果字符串调取相应的视图页⾯。
下图是拦截器和action之间的关系:这是⼀种典型的AOP思想,当我们在Struts.xml中定义⼀个包的时候,⼤部分情况下我们会继承struts-default⽂件,所以虽然我们在⾃⼰的配置⽂件中并没有⼿动配置任何的拦截器,但是我们创建的action却被很多拦截器拦截处理,就是因为struts-default中配置的拦截器⽣效了。
Struts中内建了很多的拦截器,他们⼤多被配置在struts-default⽂件中,详细的内建拦截器的介绍可以参考官⽅API,接下来我们看如何⾃定义⼀个拦截器。
⼆、⾃定义拦截器实现类想要实现⾃⼰的拦截器类只需要实现 com.opensymphony.xwork2.interceptor.Interceptor.Interceptor 接⼝即可,该接⼝中有如下⼏个⽅法:public abstract void destroy();public abstract void init();public abstract String intercept(ActionInvocation paramActionInvocation)throws Exception;init ⽅法在执⾏拦截⽅法之前回调,主要⽤于初始化⼀些资源,destroy 与init ⽅法对应,在拦截器实例被销毁之前回调,主要⽤于释放在init ⽅法中打开的资源。
STRUTS2拦截器控制页面访问权限的设计与实现
问之前进行 拦截 , 然后 在 之 前 或之 后 加入 某些 操作 , 可 以说这 是一种 程 序设 计 思 想 。拦 截 器 主要 用于那 些受众 面积 比较 广 的功 能 , 如一 些 基础 通 用功 能 : 例 权 限检查 、 事务机制 、 日志记录 等 , 这些 功能可能会 随 着需求 的变化导致 运用 范 围和 方式 的变化 , 使用拦 截 器 可 以将这 些功 能动态插 人到所 要运行 的地 方 , 而 从
面开 发方式 已经很 难 满 足如 今程 序 的开发 要 求 。经 过多 年的发展 , b技 术也 不 断 的在 发展 , 多组织 We 很 和公 司开发 出 了一些 页面公 用 组件 或 框架 来 提 高 和 优化 We b程序 的设 计 。其 中 Jv b方 面就有许 多 aa We
框架诞生 , S usWe r、F 如 t t、 bWokJS等 , r 还有 许 多设计
</a to > cin
只要将 上 面一段 代 码 放 入 到 susx 文 件 中 , t t.ml r 即可 对页 面 idxj n e.s 行 权 限 检 查 控 制 , 中权 限 p进 其 引用 通过 it cpo- f 记 指定 前 面 定 义好 的拦 截 ne etre 标 r r 器 atoi 就 可 以。这样 控制 后 当用户 访 问 页面 i. uhry t n dxj e. p页 面时 , 先会 检查 访 问者 的权 限 , 于系 统 s 首 对 想要 控制 的页 面 , 都可 以这样 引用 这个 权 限拦 截器 。
< a to a c n n me= ’i d x” > i ’n e
vctn 方 法实 现 拦 截 器 的权 限检 查 功 能 。考 虑 到 oao ) i
struts表单校验
解决办法
观察其和html标记的区别
◦ 生成表格 ◦ 有自动数据类型错误验证 ◦ 错误信息显示在组件的上面
实现功能: age在1—150之间; username在1—6个字符之间 密码和确认密码必须一致。 生日及毕业时间不能不空,并且毕业时间一定在 生日之后
validate()方法
使用类 ActionSupport类 Validate()方法 voidaddFieldError(String fieldName, String errorMessage) Add an error message for a given field.
输入验证的必要性
客户端验证 服务器端验证
输入验证的分类
刘兴隆讲解一下 <javascript>
客户端验证方法
指在HTML页面,用javascipt进行的验证 特点:
◦ 不需要通过web服务器来进行 ◦ 速度快 ◦ 不安全,用户可以直接跳过该页面,在URL中直接进入 下一个页面 ◦ 功能局限
解决的办法
xwork.default.invalid.fieldvalue={0}error 表示在struts中,任何类型转换出错时,都会出 现“属性名字 error”信息 其中{0}指的是字段的名称。
message.propeties文件的内容
这个时候它只能显示“字段名 错误信息” 例如:age error 如果我们不想显示age,而想显示 nianling时, 使用此方法不可用? 也就是说,上面的message.properties是全局 验证文件,怎么解决?
xwork.def ault.invali d.fieldval ue={0}e rror
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
ﻩ<resultname="input">/Login.jsp</result>
ﻩﻩ<interceptor-refname="userPopedom"></interceptor-ref>
ﻩ</action>
</package>
ﻩ//TODOAuto-generated method stubﻩ
//拦截Action处理的拦截方法
// 取得请求相关的ActionContext实例
ﻩ ActionContext ctx=invocation.getInvocationContext();
ﻩMapsession=ctx.getSession();
else{
ﻩresult=Action.ERROR;
ﻩ }
returnresult;
ﻩ }
}
Error.jsp
<body>
您还没有权限登入系统!
</body>
Success.jsp
<body>
登录成功!
</body>
Login.jsp
<body>
<formaction=""method="post">
<inputtype="submit"name="sumbit"value="登录">&nbsp;&nbsp;&nbsp;&nbsp;<inputtype="reset"name="reset"value="重置">
</form>
<%String name=request.getParameter("name");
ﻩ</interceptors>
ﻩﻩ<default-interceptor-refname="myStack"></default-interceptor-ref>
ﻩﻩ<actionname="login"class="com.nchu11.action.RegisterAction">
ﻩ<resultname="success">/Success.jsp</result>
</struts>
LoginAction.Java
publicString execute()throwsException {
ﻩ//TODOAuto-generated method stub
5.配置struInterceptor.java
@SuppressWarnings("serial")
publicclassLoginInterceptorextendsAbstractInterceptor{
@Override
publicString intercept(ActionInvocation invocation)throwsException {//登录判断
ﻩﻩ<packagename="struts2"extends="struts-default">
ﻩﻩ<interceptors>
ﻩﻩ<interceptorname="userPopedom"class="com.nchu11.struts.LoginInterceptor"></interceptor>
//取出名为user的session属性
ﻩ String result=null;
String name=(String)session.get("name");
if(name!=null&& name.equals("admin")){
result= invocation.invoke();
ﻩ }
班级:11微软班姓名:同组人:
指导教师评定:签名:
一、实验目的
了解熟悉Struts2中拦截器框架的使用,利用拦截器进行一些常见动作的拦截处理。
二、实验要求
利用Struts2拦截器实现一个用户权限判断的过程,将表单中用户输入的信息进行比较。默认admin为管理员用户,当用户登录时根据输入的用户名,利用拦截器的功能,到数据库中进行比较,如果用户名为admin则可以通过,页面显示登录成功;否则,显示没有管理员权限,禁止登录。
用户名:<inputtype="text"name="name"id="name"><br><br>
<s:fielderror><s:param>password</s:param></s:fielderror>
密&nbsp;码:<inputtype="password"name="password"><br><br> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
给出实验过程中的主要界面截图和核心代码,并描述实现的思路和方法。
三、实验步骤
1.先创建数据库和表;
2.编写DBConnection.java;
3.编写LoginInterceptor.java,LoginAction.Java;
4.编写Error.jsp,Success.jsp,Login.jsp;
南昌航空大学实验报告-Struts拦截器实验权限的验证
———————————————————————————————— 作者:
———————————————————————————————— 日期:
ﻩ
南昌航空大学实验报告二
二0一四 年 五 月 十二 日
课程名称:SSH框架应用开发实验名称:Struts2拦截器实现权限的验证
<%}%>
</body>
Structs.xml
<struts><!-- 根节点 -->
ﻩ<constantname="struts.i18n.encoding"value="gb2312"></constant>
ﻩﻩ<constantname="struts.custom.i18n.resources"value="messageResource"></constant>
String password=request.getParameter("password");
if(name!=null){
ﻩsession.setAttribute("name", name);
session.setAttribute("password", password);%>
ﻩ<jsp:forwardpage="login.action"></jsp:forward>ﻩ