- 浏览: 142576 次
- 性别:
- 来自: 厦门
-
最新评论
-
占星:
<table class="bbcode&qu ...
hibernate结合spring怎么处理对象的延迟加载? -
accphc:
...
处理properties文件中key包含空格和等号的情况 -
赵武艺:
有没有办法不让jfreechart热点刷新页面?
有热点的JfreeChart柱型图(原创)[转] -
yuchensuifeng:
谢谢分享!刚学这个,现在去试试!
在struts2中使用JFreeChart -
wrrwhn:
Caused by: There is no result t ...
在struts2中使用JFreeChart
首先,在你的web.xml里加入过滤器"Acegi Channel Processing Filter"如下:
<filter>
<filter-name>Acegi Channel Processing Filter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.securechannel.ChannelProcessingFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Acegi Channel Processing Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第二步,在你的bean的配置文件中加入如下bean:
<bean id="channelProcessingFilter" class="org.acegisecurity.securechannel.ChannelProcessingFilter">
<property name="channelDecisionManager"><ref local="channelDecisionManager"/></property>
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login.action=REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS
</value>
</property>
</bean>
channelProcessingFilter的filterInvocationDefinitionSource属性中定义了哪些url将被拦截(需要验证码才能访问)
/login.action=REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS
指定当用户登录提交login.action时,需要验证码,一共有四种验证支持,如下:
REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS AlwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor (处理程序)
REQUIRES_CAPTCHA_AFTER_THRESOLD_IN_MILLIS AlwaysTestAfterTimeInMillisCaptchaChannelProcessor
REQUIRES_CAPTCHA_ABOVE_THRESOLD_REQUESTS AlwaysTestAfterMaxRequestsCaptchaChannelProcessor
REQUIRES_CAPTCHA_ONCE_ABOVE_THRESOLD_REQUESTS TestOnceAfterMaxRequestsCaptchaChannelProcessor
我选择了第一种.
<bean id="channelDecisionManager" class="org.acegisecurity.securechannel.ChannelDecisionManagerImpl">
<property name="channelProcessors">
<list>
<ref local="alwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor"/>
</list>
</property>
</bean>
<bean id="alwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor" class="org.acegisecurity.captcha.AlwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor">
<property name="thresold">
<value>20000</value>
</property>
<property name="entryPoint">
<ref bean="captchaEntryPoint" />
</property>
</bean>
<!-- captchaFormUrl属性指定了验证失败后页面的指向!!! -->
<bean id="captchaEntryPoint" class="org.acegisecurity.captcha.CaptchaEntryPoint">
<property name="captchaFormUrl">
<value>/index.action?login_error=2</value>
</property>
</bean>
captchaValidationProcessingFilter拦截了所有的http请求,如果请求中有名字为"j_captcha_response"的参数,将调用CaptchaServiceProxy 接口的实现类来进行验证码图片的生成等操作.
<bean id="captchaValidationProcessingFilter" class="org.acegisecurity.captcha.CaptchaValidationProcessingFilter">
<property name="captchaService">
<ref bean="captchaService" />
</property>
<property name="captchaValidationParameter">
<value>j_captcha_response</value>
</property>
</bean>
<bean id="captchaService" class="com.demon.security.JCaptchaServiceProxyImpl" >
<property name="jcaptchaService" ref="jcaptchaService" />
</bean>
<!-- jcaptchaService指定了用于生成验证码图片的类,不过这个生成的图片很难看,下面有一种生成自定义图片的方法-->
<bean id="jcaptchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService" />
接着更改filterChainProxy的filterInvocationDefinitionSource属性,按顺序加入captchaValidationProcessingFilter,channelProcessingFilter两个过滤器,如下:
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter, captchaValidationProcessingFilter, channelProcessingFilter, logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>
给httpSessionContextIntegrationFilter加入context属下如下:
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
<property name="context"><value>org.acegisecurity.captcha.CaptchaSecurityContextImpl</value></property>
</bean>
配置文件到此就结束了,然后是页面文件的登录表单
<s:form action="login.action" method="post">
<TABLE>
<td>请输入右边的验证码</td>
<td><input type="text" name="j_captcha_response"/>
<img src="captcha-image.action"/></td>
</tr>
</TABLE>
</s:form>
因为我是用的stucts2做为mvc框架,把作为验证码的img标签的src指定为"captcha-image.action",
然后在struct.xml配置相应的action如下:
<action name="captcha-image" class="com.demon.security.CaptchaImageCreateController"/>
即当页面加载时,会执行CaptchaImageCreateController类,代码如下:
package com.demon.security;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.InitializingBean;
import com.opensymphony.xwork2.ActionSupport;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("serial")
public class CaptchaImageCreateController extends ActionSupport implements InitializingBean {
private ImageCaptchaService jcaptchaService;
public String execute() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
byte[] captchaChallengeAsJpeg = null;
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
String captchaId = request.getSession().getId();
//生成验证码图片,在这里我们只需要在spring的bean配置文件中更改jcaptchaService的实现,就可以生成不同的验证码图片
BufferedImage challenge = jcaptchaService.getImageChallengeForID(captchaId,request.getLocale());
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
ServletOutputStream responseOutputStream = response.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
return null;
}
public void setJcaptchaService(ImageCaptchaService jcaptchaService) {
this.jcaptchaService = jcaptchaService;
}
public void afterPropertiesSet() throws Exception {
if(jcaptchaService == null){
throw new RuntimeException("Image captcha service wasn`t set!");
}
}
}
OK!!!!!!!!!!!!!!
##########################################################################
由于<bean id="jcaptchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService" />
生成的图片确实比较丑,可以更改为以下实现:
<bean id="jcaptchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
<constructor-arg index="0"><ref bean="imageEngine"/></constructor-arg>
<constructor-arg index="1"><value>180</value></constructor-arg>
<constructor-arg index="2"><value>180000</value></constructor-arg>
</bean>
<bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">
<constructor-arg index="0">
<list>
<ref bean="CaptchaFactory"/>
</list>
</constructor-arg>
</bean>
<bean id="CaptchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory" >
<constructor-arg><ref bean="wordgen"/></constructor-arg>
<constructor-arg><ref bean="wordtoimage"/></constructor-arg>
</bean>
<bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.DictionaryWordGenerator" >
<constructor-arg><ref bean="filedict"/></constructor-arg>
</bean>
<bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage" >
<constructor-arg index="0"><ref bean="fontGenRandom"/></constructor-arg>
<constructor-arg index="1"><ref bean="backGenUni"/></constructor-arg>
<constructor-arg index="2"><ref bean="simpleWhitePaster"/></constructor-arg>
</bean>
<bean id="filedict" class="com.octo.captcha.component.word.FileDictionary" >
<constructor-arg index="0"><value>toddlist</value></constructor-arg>
</bean>
<bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator" >
<!-- 验证码字体最小值 -->
<constructor-arg index="0"><value>20</value></constructor-arg>
<!-- 验证码字体最大值 -->
<constructor-arg index="1"><value>20</value></constructor-arg>
<constructor-arg index="2">
<list>
<ref bean="fontArial"/>
</list>
</constructor-arg>
</bean>
<bean id="fontArial" class="java.awt.Font" >
<constructor-arg index="0"><value>Arial</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>10</value></constructor-arg>
</bean>
<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator" >
<!-- 验证码图片长度 -->
<constructor-arg index="0"><value>80</value></constructor-arg>
<!-- 验证码图片高度 -->
<constructor-arg index="1"><value>25</value></constructor-arg>
</bean>
<bean id="simpleWhitePaster" class="com.octo.captcha.component.image.textpaster.SimpleTextPaster" >
<!-- 验证码个数最小值 -->
<constructor-arg type="java.lang.Integer" index="0">
<value>4</value>
</constructor-arg>
<!-- 验证码个数最大值 -->
<constructor-arg type="java.lang.Integer" index="1">
<value>4</value>
</constructor-arg>
<!-- 验证码颜色 -->
<constructor-arg type="java.awt.Color" index="2">
<ref bean="colorGreen"/>
</constructor-arg>
</bean>
<bean id="colorGreen" class="java.awt.Color" >
<constructor-arg index="0"><value>0</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>255</value></constructor-arg>
</bean>
wish can help you best!!!
<filter>
<filter-name>Acegi Channel Processing Filter</filter-name>
<filter-class>org.acegisecurity.util.FilterToBeanProxy</filter-class>
<init-param>
<param-name>targetClass</param-name>
<param-value>org.acegisecurity.securechannel.ChannelProcessingFilter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Acegi Channel Processing Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
第二步,在你的bean的配置文件中加入如下bean:
<bean id="channelProcessingFilter" class="org.acegisecurity.securechannel.ChannelProcessingFilter">
<property name="channelDecisionManager"><ref local="channelDecisionManager"/></property>
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/login.action=REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS
</value>
</property>
</bean>
channelProcessingFilter的filterInvocationDefinitionSource属性中定义了哪些url将被拦截(需要验证码才能访问)
/login.action=REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS
指定当用户登录提交login.action时,需要验证码,一共有四种验证支持,如下:
REQUIRES_CAPTCHA_BELOW_AVERAGE_TIME_IN_MILLIS_REQUESTS AlwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor (处理程序)
REQUIRES_CAPTCHA_AFTER_THRESOLD_IN_MILLIS AlwaysTestAfterTimeInMillisCaptchaChannelProcessor
REQUIRES_CAPTCHA_ABOVE_THRESOLD_REQUESTS AlwaysTestAfterMaxRequestsCaptchaChannelProcessor
REQUIRES_CAPTCHA_ONCE_ABOVE_THRESOLD_REQUESTS TestOnceAfterMaxRequestsCaptchaChannelProcessor
我选择了第一种.
<bean id="channelDecisionManager" class="org.acegisecurity.securechannel.ChannelDecisionManagerImpl">
<property name="channelProcessors">
<list>
<ref local="alwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor"/>
</list>
</property>
</bean>
<bean id="alwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor" class="org.acegisecurity.captcha.AlwaysTestBelowAverageTimeInMillisBetweenRequestsChannelProcessor">
<property name="thresold">
<value>20000</value>
</property>
<property name="entryPoint">
<ref bean="captchaEntryPoint" />
</property>
</bean>
<!-- captchaFormUrl属性指定了验证失败后页面的指向!!! -->
<bean id="captchaEntryPoint" class="org.acegisecurity.captcha.CaptchaEntryPoint">
<property name="captchaFormUrl">
<value>/index.action?login_error=2</value>
</property>
</bean>
captchaValidationProcessingFilter拦截了所有的http请求,如果请求中有名字为"j_captcha_response"的参数,将调用CaptchaServiceProxy 接口的实现类来进行验证码图片的生成等操作.
<bean id="captchaValidationProcessingFilter" class="org.acegisecurity.captcha.CaptchaValidationProcessingFilter">
<property name="captchaService">
<ref bean="captchaService" />
</property>
<property name="captchaValidationParameter">
<value>j_captcha_response</value>
</property>
</bean>
<bean id="captchaService" class="com.demon.security.JCaptchaServiceProxyImpl" >
<property name="jcaptchaService" ref="jcaptchaService" />
</bean>
<!-- jcaptchaService指定了用于生成验证码图片的类,不过这个生成的图片很难看,下面有一种生成自定义图片的方法-->
<bean id="jcaptchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService" />
接着更改filterChainProxy的filterInvocationDefinitionSource属性,按顺序加入captchaValidationProcessingFilter,channelProcessingFilter两个过滤器,如下:
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
<property name="filterInvocationDefinitionSource">
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/**=httpSessionContextIntegrationFilter, captchaValidationProcessingFilter, channelProcessingFilter, logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
</value>
</property>
</bean>
给httpSessionContextIntegrationFilter加入context属下如下:
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
<property name="context"><value>org.acegisecurity.captcha.CaptchaSecurityContextImpl</value></property>
</bean>
配置文件到此就结束了,然后是页面文件的登录表单
<s:form action="login.action" method="post">
<TABLE>
<td>请输入右边的验证码</td>
<td><input type="text" name="j_captcha_response"/>
<img src="captcha-image.action"/></td>
</tr>
</TABLE>
</s:form>
因为我是用的stucts2做为mvc框架,把作为验证码的img标签的src指定为"captcha-image.action",
然后在struct.xml配置相应的action如下:
<action name="captcha-image" class="com.demon.security.CaptchaImageCreateController"/>
即当页面加载时,会执行CaptchaImageCreateController类,代码如下:
package com.demon.security;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts2.ServletActionContext;
import org.springframework.beans.factory.InitializingBean;
import com.opensymphony.xwork2.ActionSupport;
import com.octo.captcha.service.image.ImageCaptchaService;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
@SuppressWarnings("serial")
public class CaptchaImageCreateController extends ActionSupport implements InitializingBean {
private ImageCaptchaService jcaptchaService;
public String execute() throws Exception{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
byte[] captchaChallengeAsJpeg = null;
ByteArrayOutputStream jpegOutputStream = new ByteArrayOutputStream();
String captchaId = request.getSession().getId();
//生成验证码图片,在这里我们只需要在spring的bean配置文件中更改jcaptchaService的实现,就可以生成不同的验证码图片
BufferedImage challenge = jcaptchaService.getImageChallengeForID(captchaId,request.getLocale());
JPEGImageEncoder jpegEncoder = JPEGCodec.createJPEGEncoder(jpegOutputStream);
jpegEncoder.encode(challenge);
captchaChallengeAsJpeg = jpegOutputStream.toByteArray();
response.setHeader("Cache-Control", "no-store");
response.setHeader("Pragma", "no-cache");
response.setDateHeader("Expires", 0);
response.setContentType("image/jpeg");
ServletOutputStream responseOutputStream = response.getOutputStream();
responseOutputStream.write(captchaChallengeAsJpeg);
responseOutputStream.flush();
responseOutputStream.close();
return null;
}
public void setJcaptchaService(ImageCaptchaService jcaptchaService) {
this.jcaptchaService = jcaptchaService;
}
public void afterPropertiesSet() throws Exception {
if(jcaptchaService == null){
throw new RuntimeException("Image captcha service wasn`t set!");
}
}
}
OK!!!!!!!!!!!!!!
##########################################################################
由于<bean id="jcaptchaService" class="com.octo.captcha.service.image.DefaultManageableImageCaptchaService" />
生成的图片确实比较丑,可以更改为以下实现:
<bean id="jcaptchaService" class="com.octo.captcha.service.multitype.GenericManageableCaptchaService">
<constructor-arg index="0"><ref bean="imageEngine"/></constructor-arg>
<constructor-arg index="1"><value>180</value></constructor-arg>
<constructor-arg index="2"><value>180000</value></constructor-arg>
</bean>
<bean id="imageEngine" class="com.octo.captcha.engine.GenericCaptchaEngine">
<constructor-arg index="0">
<list>
<ref bean="CaptchaFactory"/>
</list>
</constructor-arg>
</bean>
<bean id="CaptchaFactory" class="com.octo.captcha.image.gimpy.GimpyFactory" >
<constructor-arg><ref bean="wordgen"/></constructor-arg>
<constructor-arg><ref bean="wordtoimage"/></constructor-arg>
</bean>
<bean id="wordgen" class= "com.octo.captcha.component.word.wordgenerator.DictionaryWordGenerator" >
<constructor-arg><ref bean="filedict"/></constructor-arg>
</bean>
<bean id="wordtoimage" class="com.octo.captcha.component.image.wordtoimage.ComposedWordToImage" >
<constructor-arg index="0"><ref bean="fontGenRandom"/></constructor-arg>
<constructor-arg index="1"><ref bean="backGenUni"/></constructor-arg>
<constructor-arg index="2"><ref bean="simpleWhitePaster"/></constructor-arg>
</bean>
<bean id="filedict" class="com.octo.captcha.component.word.FileDictionary" >
<constructor-arg index="0"><value>toddlist</value></constructor-arg>
</bean>
<bean id="fontGenRandom" class="com.octo.captcha.component.image.fontgenerator.RandomFontGenerator" >
<!-- 验证码字体最小值 -->
<constructor-arg index="0"><value>20</value></constructor-arg>
<!-- 验证码字体最大值 -->
<constructor-arg index="1"><value>20</value></constructor-arg>
<constructor-arg index="2">
<list>
<ref bean="fontArial"/>
</list>
</constructor-arg>
</bean>
<bean id="fontArial" class="java.awt.Font" >
<constructor-arg index="0"><value>Arial</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>10</value></constructor-arg>
</bean>
<bean id="backGenUni" class="com.octo.captcha.component.image.backgroundgenerator.UniColorBackgroundGenerator" >
<!-- 验证码图片长度 -->
<constructor-arg index="0"><value>80</value></constructor-arg>
<!-- 验证码图片高度 -->
<constructor-arg index="1"><value>25</value></constructor-arg>
</bean>
<bean id="simpleWhitePaster" class="com.octo.captcha.component.image.textpaster.SimpleTextPaster" >
<!-- 验证码个数最小值 -->
<constructor-arg type="java.lang.Integer" index="0">
<value>4</value>
</constructor-arg>
<!-- 验证码个数最大值 -->
<constructor-arg type="java.lang.Integer" index="1">
<value>4</value>
</constructor-arg>
<!-- 验证码颜色 -->
<constructor-arg type="java.awt.Color" index="2">
<ref bean="colorGreen"/>
</constructor-arg>
</bean>
<bean id="colorGreen" class="java.awt.Color" >
<constructor-arg index="0"><value>0</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>255</value></constructor-arg>
</bean>
wish can help you best!!!
评论
1 楼
ray_linn
2008-05-19
<bean id="colorGreen" class="java.awt.Color" >
<constructor-arg index="0"><value>0</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>255</value></constructor-arg>
</bean>
好像应该加上 type="int" ,不然会出错。
<constructor-arg index="0"><value>0</value></constructor-arg>
<constructor-arg index="1"><value>0</value></constructor-arg>
<constructor-arg index="2"><value>255</value></constructor-arg>
</bean>
好像应该加上 type="int" ,不然会出错。
发表评论
-
Subversion的安装配置
2008-08-06 10:15 2522Subversion是很好用的版本控制工具,以前自己也动手安装 ... -
处理properties文件中key包含空格和等号的情况
2008-06-12 16:11 14245在properties文件中都是以key=value的方式存储 ... -
mysql修改root密码
2008-05-07 10:20 2896mysql 更改密码如下(本人刚刚测试过的RH9.0): 在 ... -
tomcat的OutOfMemoryError解决方法
2008-05-04 14:54 6048最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植 ... -
使用ant执行sql脚本重建oracle数据库
2008-04-21 17:26 5937最近工作中,需要把之前的产品(基于mysql数据库的)转换到o ... -
struts2+spring2+hibernate3 Annotation的整合
2008-04-16 15:22 6793继续前两篇文章[在struts2中使用JFreeChart ] ... -
在struts2中使用JFreeChart
2008-04-10 14:33 14344继续上一篇的 在struts2中使用JasperReports ... -
在struts2中使用JasperReports
2008-04-09 10:49 6036最近工作中要求可以把网页信息以报表的形式输出,虽然以前有接触过 ... -
有热点的JfreeChart柱型图(原创)[转]
2008-04-07 11:04 3666实现方式:jsp+javabean 版本 :jfreecha ... -
hibernate结合spring怎么处理对象的延迟加载?
2008-01-23 13:01 2323在hibernate3中所有从数据库查询出来的数据,都是默认l ... -
自定义类型安全的枚举
2008-01-18 13:09 1469package com.goodhope.tradingapp ... -
已有字数:4,剩余字数:196
2008-01-15 19:57 1493function CountNodeNum(Obj) { ... -
spring mail sender
2008-01-13 18:23 1306import java.util.Properties; i ... -
eclipse反编译插件Jadclipse的使用
2007-06-13 17:56 4016jadclips插件网站: http://jadcli ... -
如何使用ant的bulid.xml
2007-04-25 08:55 4240最近电脑系统有些问题,硬盘全部被格式化,原来的所有文件都没有了 ... -
使用keytool生成SSL双向认证
2007-01-25 08:32 4265Microsoft Windows XP [版本 5.1.26 ...
相关推荐
本文将详细介绍`jCaptcha`在基于`Acegi`安全框架的应用中的使用,以及如何设置一个简单的`jCaptcha`验证码实例。 首先,我们来看`jcaptcha-1.0-all.jar`这个文件,它是`jCaptcha`的核心库,包含了所有必要的类和...
`Acegi X_509双向认证 (添加验证码jcaptcha).mht`可能涉及到了基于X.509证书的SSL/TLS客户端认证,这是一种更高级的身份验证方式,常用于企业级应用。同时,结合jCaptcha的使用,可以防止恶意自动化的登录尝试,...
- **基于Acegi框架**:Spring Security 2是在流行的Acegi安全框架基础上构建的; - **Spring命名空间改进**:通过Spring的命名空间改进了可用性; - **增强的LDAP支持**:提供了更好的LDAP集成能力; - **增强的单点...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...
Struts2的插件,用来增加验证码的支持,使用时只需要用一个 JSP 标签 (<jcaptcha:image label="Type the text "/> ) 即可,直接在 struts.xml 中进行配置,使用强大的 JCaptcha来生成验证码图片。 Java 命令行解析...