인증 코드 학습 및 구현
5675 단어 JavaScriptstruts난수인증번호이미지
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
public class RandomNumUtil {
/*
* ByteArrayInputStream , 。
*/
private ByteArrayInputStream image;//
private String str;//
private RandomNumUtil() {
init();//
}
public ByteArrayInputStream getImage() {
return this.image;
}
public String getString() {
return this.str;
}
private void init() {
//
int width = 86, height = 21;
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//
Graphics g = image.getGraphics();
//
Random random = new Random();
//
g.setColor(getRandColor(200, 250));
g.fillRect(0, 0, width, height);
//
g.setFont(new Font("Times New Roman", Font.PLAIN, 18));
// 155 ,
g.setColor(getRandColor(160, 200));
for (int i = 0; i < 155; i++) {
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(12);
int yl = random.nextInt(12);
g.drawLine(x, y, x + xl, y + yl);
}
// (6 )
String sRand = "";
for (int i = 0; i < 6; i++) {
String rand = String.valueOf(random.nextInt(10));
sRand += rand;
//
g.setColor(new Color(20 + random.nextInt(110), 20 + random
.nextInt(110), 20 + random.nextInt(110)));
// , ,
g.drawString(rand, 13 * i + 6, 16);
}
//
this.str = sRand;
//
g.dispose();
ByteArrayInputStream input = null;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
ImageOutputStream imageOut = ImageIO
.createImageOutputStream(output);
ImageIO.write(image, "JPEG", imageOut);
imageOut.close();
input = new ByteArrayInputStream(output.toByteArray());
} catch (Exception e) {
System.out.println(" :" + e.toString());
}
this.image = input;/* */
}
/*
*
*/
private Color getRandColor(int fc, int bc) {
Random random = new Random();
if (fc > 255)
fc = 255;
if (bc > 255)
bc = 255;
int r = fc + random.nextInt(bc - fc);
int g = fc + random.nextInt(bc - fc);
int b = fc + random.nextInt(bc - fc);
return new Color(r, g, b);
}
}
그리고 구체 적 인 제어 클래스 RandomAction. java 를 만 듭 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
import java.io.ByteArrayInputStream;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.softeye.util.RandomNumUtil;
public class RandomAction extends ActionSupport {
private ByteArrayInputStream inputStream;
public String execute() throws Exception {
RandomNumUtil rdnu = new RandomNumUtil();
this.setInputStream(rdnu.getImage());//
ActionContext.getContext().getSession().put("random", rdnu.getString());// HttpSession
return SUCCESS;
}
public void setInputStream(ByteArrayInputStream inputStream) {
this.inputStream = inputStream;
}
public ByteArrayInputStream getInputStream() {
return inputStream;
}
}
그리고 struts. xml 에서 RandomAction 을 설정 합 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
<!-- Random -->
<action name="rand" class="com.softeye.action.login.RandomAction">
<result type="stream">
<param name="contentType">image/jpeg</param>
<param name="inputName">inputStream</param>
</result>
</action>
마지막 으로 등록 페이지 에 인증 코드 기능 을 추가 합 니 다. 첫째, 헤드 탭 에 자 바스 크 립 트 를 추가 합 니 다. 구체 적 인 코드 는 다음 과 같 습 니 다.
<script type="text/javascript">
function changeValidateCode(obj) {
// ,
var timenow = new Date().getTime();
// ,
// , , 。
obj.src="<%=path%>/user/rand.action?d="+timenow;
}
</script>
둘째, 페이지 의 해당 위치 에서 인증 코드 를 디자인 한다. 예 를 들 어:
<tr>
<th>
<span>*</span> :
</th>
<td>
<input id="" name="rand" value="" type="text" />
<span><img src="<%=path %>/user/rand.action" onclick="changeValsidateCode(this)" title=" "/>
</span>
</td>
</tr>
이로써 대량 등록 을 방지 하 는 인증 코드 기능 이 실현 되 었 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.