`
wjt276
  • 浏览: 650362 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Struts2 生成图形验证码及进行验证码验证-修改后代码(二)

    博客分类:
  • Java
阅读更多

三、BaseAction代码

 

package com.wjt276.co.web.actions;

import com.opensymphony.xwork2.ActionSupport;

/**
 * 父类Action
 * 可以在构造方法中获取所有Action都需要的参数
 * @author wjt276
 *
 */
@SuppressWarnings("serial")
public class BaseAction extends ActionSupport {
	
	
//---------------以下为生成图形验证码的代码----------------------------------------------------------------------------------------------------------------
	
	/**
	 * 用于接受用户从前台输入的验证码,以便进行验证
	 */
	private String validateCode;
	
	public String getValidateCode() {
		return validateCode;
	}
	public void setValidateCode(String validateCode) {
		this.validateCode = validateCode;
	}
	
	protected void validateImgCode(String validateCode) throws Exception{
		if(!validateCode.equals(this.getValidateCode().trim())){
			throw new Exception("验证码不正确,请重新输入");
		}
	}	

}

 

 

四、AbstractManager代码

 

 

package com.wjt276.co.managers.impl;

import java.util.List;

import org.hibernate.Query;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import com.wjt276.co.PagerModel;
import com.wjt276.co.SystemException;


/**
 * 分页查询类
 * @author wjt276
 *
 */
public class AbstractManager extends HibernateDaoSupport{	

	/**
	 * 分页查询-根据HQL语句进行分页查询
	 * @param hql HQL语句
	 * @param offset 从第几条记录开始查询
	 * @param pageSize 每页显示多少条记录
	 * @return 返回包含总记录数、以及结果集
	 */
	public PagerModel searchPaginated(String hql, int offset, int pageSize){		
		return this.searchPaginated(hql, null, offset, pageSize);		
	}
	
	/**
	 * 分页查询-根据HQL语句进行分页查询
	 * @param hql HQL语句
	 * @param param HQL语句带的一个参数值
	 * @param offset 从第几条记录开始查询
	 * @param pageSize 每页显示多少条记录
	 * @return 返回包含总记录数、以及结果集
	 */
	public PagerModel searchPaginated(String hql, Object param, int offset, int pageSize){
		return this.searchPaginated(hql, new Object[]{param}, offset, pageSize);
	}
	
	
	/**
	 * 分页查询-根据HQL语句进行分页查询
	 * @param hql HQL语句
	 * @param params HQL语句带的多个参数值
	 * @param offset 从第几条记录开始查询
	 * @param pageSize 每页显示多少条记录
	 * @return 返回包含总记录数、以及结果集
	 */
	public PagerModel searchPaginated(String hql, Object[] params, int offset, int pageSize){
		
		//1、获取记录总数
		String countHql = this.getCountQuery(hql);
		
		Query query = this.getSession().createQuery(countHql);
		if(params != null && params.length > 0){
			for(int i = 0; i < params.length; i++){
				query.setParameter(i, params[i]);
			}
		}
		int total = ((Long)query.uniqueResult()).intValue();
		
		//获取查询的数据
		query =this.getSession().createQuery(hql);
		if(params != null && params.length > 0){
			for(int i = 0; i < params.length; i++){
				query.setParameter(i, params[i]);
			}
		}
		query.setFirstResult(offset);
		query.setMaxResults(pageSize);
		List datas = query.list();

		PagerModel pm = new PagerModel();
		pm.setTotal(total);
		pm.setDatas(datas);
		
		return pm;
		
	}

	
	/**
	 * 根据HQL语句,抽取查询总记录数的HQL语句<br/>
	 * 如:<br/>
	 * from Orgnization o where o.parent is null<br/>
	 * 经过转换,可以得到:<br/>
	 * select count(*) from Orgnization o where o.parent is null<br/>
	 * @param hql
	 * @return
	 */
	private String getCountQuery(String hql){
		int index = hql.indexOf("from");
		if (index != -1){
			return "select count(*) " + hql.substring(index);
		}
		throw new SystemException("无效的HQL语句");
		
		
		
	}
}

 

 

五、Key代码

 

package com.wjt276.co.web.actions;

public class Key {

	/**
	 *  保存已经生成的留言簿验证码,以便作为验证依据
	 *  注:这里是静态变量,目的是就可以保存这个值,只到新的验证码出现替换值
	 */
	public static String guestbookValidateCode;
	
	public static String validateCode;

	public static final int DEFAULT_VALIDATEIMG_WIDTH = 80;
	
	public static final int DEFAULT_VALIDATEIMG_HEIGHT = 20;
	
	public static final int DEFAULT_VALIDATEIMG_FONT_SIZE = 16;
	
	public static final int DEFAULT_VALIDATEIMG_CODE_LENGTH = 4;
	
	public static final String DEFAULT_VALIDATEIMG_CONTENT_TYPE = "image/jpeg";

}

 

六、测试的ACTION

package com.wjt276.co.web.actions;

@SuppressWarnings("serial")
public class TestAction extends BaseAction {

	@Override
	public String execute() throws Exception {
		return SUCCESS;
	}
	
	public String add() throws Exception{
		this.validateImgCode(Key.validateCode);
		return SUCCESS;
	}

}

 

 

 

七、配置好SPRINGR 的BEAN

	<context:annotation-config />
	<!--<context:component-scan base-package="com.wjt276" />-->
	<!--<aop:aspectj-autoproxy/>-->
	
	<bean
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="locations">
			<value>classpath:jdbc.properties</value>
		</property>
	</bean>

	<bean id="dataSource" destroy-method="close"
		class="org.apache.commons.dbcp.BasicDataSource">
		<property name="driverClassName" value="${jdbc.driverClassName}" />
		<property name="url" value="${jdbc.url}" />
		<property name="username" value="${jdbc.username}" />
		<property name="password" value="${jdbc.password}" />
	</bean>
     
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
	    <property name="dataSource" ref="dataSource"/>  
	    <property name="packagesToScan">
	      <list>
	        <value>com.wjt276.co.model</value>
	      </list>
	    </property>
	  
	     
	    <property name="hibernateProperties">
	    	<props>
	    		<prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
	    		<prop key="hibernate.show_sql">true</prop>
	    		<prop key="hibernate.format_sql">true</prop>
	    		<prop key="hibernate.hbm2ddl.auto">update</prop>
	    	</props>
	    </property>    
  </bean>
  
  <!-- 1、配置一个事务管理器txManager 配置此事务管理器时,需要提供一个已经配置的SessionFactory-->
  <bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
  		<property name="sessionFactory" ref="sessionFactory"/>
  </bean>
  
  <!-- 2、配置advice(建议,建议Spring需要进行事务管理),提提供一个事务管理器,和事务管理器的一些选项 -->
  <tx:advice id="txAdvice" transaction-manager="txManager">
    <tx:attributes>
      		<tx:method name="add*" propagation="REQUIRED"/>
			<tx:method name="deploy*" propagation="REQUIRED"/>
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED"/>
			<tx:method name="*" read-only="true"/>
  </tx:attributes>
  </tx:advice>
  <!-- 3、xml使用Spring事务管理需要在切面配置标签中完成
  		a、首先需要定义切入点pointcut:说明哪些地方需要进行事务管理
  		b、再使用advisor说明在什么的pointcut下,使用什么的事务管理。就可以了。
   -->
   <aop:config>
  		<aop:pointcut id="saveServiceOperation" expression="execution(* com.wjt276.co.managers..*.*(..))"/>
  		<aop:advisor advice-ref="txAdvice" pointcut-ref="saveServiceOperation"/>
  </aop:config>
  
  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  	<property name="sessionFactory" ref="sessionFactory"/>
  </bean>	


<bean id="validateImageManager" class="com.wjt276.co.managers.impl.ValidateImageManagerImpl">
		<property name="sessionFactory" ref="sessionFactory"/>
	</bean>
	
	<bean id="validateImgAction" class="com.wjt276.co.web.actions.ValidateImgAction" scope="prototype">
		<property name="validateImageManager" ref="validateImageManager"/>
	</bean>
	<bean id="testAction" class="com.wjt276.co.web.actions.TestAction" scope="prototype">
	</bean>

 

 

八、jdbc.properties

 

jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc\:mysql\://localhost\:3306/code
jdbc.username=root
jdbc.password=root

 

 

 

九 Struts2配置文件

 

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

<struts>
		 
 	<constant name="struts.devMode" value="true" />
	<constant name="struts.i18n.encoding" value="GBK"></constant>
 	  
 	<package name="base" namespace="/" extends="struts-default">
        <global-results>
        	<result name="exceptionUrl">/common/exception.jsp</result>
        	<result name="add_success">/common/pub_add_success.jsp</result>
   			<result name="delete_success">/common/pub_delete_success.jsp</result>
        </global-results>
        <global-exception-mappings>
        	<exception-mapping result="exceptionUrl" exception="java.lang.Exception"/>
        </global-exception-mappings>
    </package>
 	  
	<package name="front" namespace="/" extends="base">
	       <action name="validateImg" class="com.wjt276.co.web.actions.ValidateImgAction">   
		      <result type="stream">   
		               <param name="contentType">image/jpeg</param>   
		               <param name="inputName">inputStream</param>   
		        </result>	
		 </action>
	       <action name="test" class="com.wjt276.co.web.actions.TestAction">   
		      <result>/MyJsp.jsp</result>
		      <exception-mapping result="success" exception="java.lang.Exception"/>
		 </action>
    </package>
    
    
  

 

 最后:JSP测试代码

  <body>
    This is my JSP page. <br>
    <script type="text/javascript">   
    function changeValidateCode(obj) {   
           //获取当前的时间作为参数,无具体意义   
        var timenow = new Date().getTime();   
           //每次请求需要一个不同的参数,否则可能会返回同样的验证码   
        //这和浏览器的缓存机制有关系,也可以把页面设置为不缓存,这样就不用这个参数了。   
        obj.src="validateImg.action?d="+timenow;   
    }
	</script>   
	 
  <form action="test!add" method="get">
  	<input name="validateCode"/><img src="validateImg.action" onclick="changeValidateCode(this)" style="cursor: hand;" alt="点击刷新验证码"/>
  	<input type="submit">
  </form>
 
 <s:property value="exception.message"/>
  </body>

 

分享到:
评论

相关推荐

    struts2生成中文验证码的Action

    在这个特定的场景中,我们讨论的是如何在Struts2中创建一个能够生成中文验证码的Action。 验证码的主要目的是防止自动机器人或恶意攻击,通过向用户提供一组随机字符(通常是数字和/或字母)来验证他们是否是真实的...

    struts2 验证码----web界面生成几种常见的验证码

    Struts2提供了一些内置的支持来帮助开发者生成和验证验证码,以增强网站的安全性。 验证码的种类多样,包括图像验证码、音频验证码、数学问题验证码等。在Struts2中,我们可以使用插件或自定义拦截器来实现这些功能...

    成功的验证码案例-----struts验证码demo

    5. **图片生成**:验证码的图像通常是动态生成的,这通常涉及到一些图形库,如Java的`java.awt.image.BufferedImage`和`java.awt.Color`等,用于创建随机颜色和形状的文本。 6. **安全考虑**:为了提高安全性,...

    Struts2验证码

    在Struts2的Action中,取出Session中的验证码与用户输入的进行比较,如果匹配则通过验证,否则返回错误信息。 ```java String userCaptcha = actionRequest.getParameter("captcha"); String sessionCaptcha = ...

    struts2下实现了图片验证码

    验证码的核心目的是通过生成随机的图形或字符让用户输入来验证其是否为真实用户。通常包括以下几个步骤: 1. **生成随机字符串**:作为验证码的基础。 2. **渲染成图像**:将字符串转化为图像形式展示给用户。 3. **...

    java开发Eclipse+struts+Hibernate制作图形验证码及登录视频

    总的来说,通过Eclipse、Struts和Hibernate的结合,我们可以构建出一个完整的、安全的用户登录系统,并辅以图形验证码增强安全性。这个视频教程将会详细演示以上所有步骤,帮助开发者快速掌握这些核心技术的应用。

    struts2 图片 验证码

    总结来说,Struts2实现图片验证码主要涉及生成随机字符串、绘制图片、配置Action、定义结果类型以及处理用户验证。这个过程需要结合Java图形编程、HTTP响应处理和会话管理等多个方面的知识。通过实践,你可以更好地...

    struts2验证码

    Struts2验证码是一种用于验证用户身份的安全机制,它在Web应用程序中广泛使用,防止恶意自动化的机器人或爬虫进行操作,比如防止批量注册、刷票等。本示例提供了使用Struts2框架实现验证码功能的完整代码,全部采用...

    struts2做的验证码(区分数字和字母)

    在Struts2中实现验证码功能,通常涉及到生成随机字符串、显示图像以及验证用户输入是否与生成的验证码匹配。 本压缩包"struts2做的验证码(区分数字和字母).rar"可能包含了一个实现了数字和字母混合的验证码生成器...

    通过Struts2返回验证码文件

    "通过Struts2返回验证码文件"这一主题主要涉及如何利用Struts2来生成并返回一个动态的、用于验证用户输入的图形验证码。以下是对这个知识点的详细阐述: 首先,验证码是一种安全机制,它要求用户输入在图像上显示的...

    struts2_中的验证码

    在Struts2框架中,验证码通常用于验证用户输入的安全性,防止自动化的恶意攻击,如机器人脚本或垃圾邮件发送者。验证码是一种图形图像,其中包含随机生成的文字或数字,用户需要正确输入这些内容才能完成特定操作,...

    JSP自动生成彩色验证码

    提交表单后,服务器端的action类(可能是一个Servlet或Struts Action)会接收到请求,从会话中取出预存的验证码字符串,与用户输入的验证码进行比对,判断是否匹配,从而完成验证。 验证码的验证流程通常如下: 1. ...

    java开发Eclipse+struts+Hibernate制作图形验证码

    在这个项目中,开发者使用Eclipse、Struts和Hibernate来创建一个图形验证码功能,以增强用户登录的安全性。 首先,`LoginAction.java`是Struts框架中的Action类,它是业务逻辑处理的核心。这个文件通常会包含处理...

    验证码图片生成器,java源码

    验证码图片生成器是一种用于网络安全验证的技术,主要用于防止自动化的机器人或恶意软件进行非法操作,如批量注册、恶意登录等。这个Java源码实现的验证码生成器具有易用性且适应性强,可以根据需求调整验证码的类型...

    struts验证码

    4. **Session存储**:为了在用户提交验证码后进行验证,我们需要将生成的验证码存储在用户的Session中。Session是服务器端的一种数据存储机制,用于在用户会话期间保持数据,防止跨请求的数据篡改。 5. **表单提交*...

    java web加法验证码实例

    本实例将探讨如何使用简单的Servlet生成加法验证码,并将其整合到Struts2、SSH2(Spring、Struts2、Hibernate)和Mybatis等流行框架中。这个实践教程将帮助开发者了解验证码的基本实现以及与主流框架的集成。 首先...

    3个java登录验证码的例子全网最全

    1. **Struts2拦截器**:自定义拦截器实现验证码的生成和验证。 2. **Action类**:处理登录请求的业务逻辑,包括校验验证码。 3. **Result类型**:可能使用了Struts2的FreeMarker模板引擎来渲染验证码图片。 4. **...

    jsp用户登录验证码

    4. **验证码验证**: - 用户输入验证码后提交表单。 - 在后端获取`HttpSession`中的验证码并与用户输入进行比较。 #### 四、代码分析 - **验证图片生成**: ```java package cn.com.lough.struts.action; ...

    验证码工具类.zip

    用户提交表单时,Struts2会调用预先配置的验证码验证拦截器,比较session中的验证码值与用户输入,若不匹配则抛出异常或返回错误信息。 ### 其他相关知识点 1. **.jar包**: 提供的.jar包可能包含了验证码生成所...

    struts2讲义

    - **知识点**: 介绍了如何创建自定义标签来实现图形验证码功能。 - **核心内容**: - 自定义标签需要通过实现Tag接口来创建。 - 可以通过配置文件将自定义标签集成到项目中。 通过以上内容的学习,我们可以深入...

Global site tag (gtag.js) - Google Analytics