1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
package
com.lavasoft.ntv.web;
import
org.patchca.color.ColorFactory;
import
org.patchca.filter.predefined.*;
import
org.patchca.service.ConfigurableCaptchaService;
import
org.patchca.utils.encoder.EncoderHelper;
import
org.patchca.word.RandomWordFactory;
import
org.springframework.stereotype.Controller;
import
org.springframework.web.bind.annotation.RequestMapping;
import
javax.servlet.http.HttpServletRequest;
import
javax.servlet.http.HttpServletResponse;
import
javax.servlet.http.HttpSession;
import
java.awt.*;
import
java.io.IOException;
import
java.util.Random;
/**
* patchca生成多彩验证码
*
* @author leizhimin 14-5-5 下午11:51
*/
@Controller
public
class
Login2Controller {
private
static
ConfigurableCaptchaService cs =
new
ConfigurableCaptchaService();
private
static
Random random =
new
Random();
static
{
// cs.setColorFactory(new SingleColorFactory(new Color(25, 60, 170)));
cs.setColorFactory(
new
ColorFactory() {
@Override
public
Color getColor(
int
x) {
int
[] c =
new
int
[
3
];
int
i = random.nextInt(c.length);
for
(
int
fi =
0
; fi < c.length; fi++) {
if
(fi == i) {
c[fi] = random.nextInt(
71
);
}
else
{
c[fi] = random.nextInt(
256
);
}
}
return
new
Color(c[
0
], c[
1
], c[
2
]);
}
});
RandomWordFactory wf =
new
RandomWordFactory();
wf.setCharacters(
"23456789abcdefghigkmnpqrstuvwxyzABCDEFGHIGKLMNPQRSTUVWXYZ"
);
wf.setMaxLength(
4
);
wf.setMinLength(
4
);
cs.setWordFactory(wf);
}
@RequestMapping
(
"/pcrimg"
)
public
void
crimg(HttpServletRequest request, HttpServletResponse response)
throws
IOException {
switch
(random.nextInt(
5
)) {
case
0
:
cs.setFilterFactory(
new
CurvesRippleFilterFactory(cs.getColorFactory()));
break
;
case
1
:
cs.setFilterFactory(
new
MarbleRippleFilterFactory());
break
;
case
2
:
cs.setFilterFactory(
new
DoubleRippleFilterFactory());
break
;
case
3
:
cs.setFilterFactory(
new
WobbleRippleFilterFactory());
break
;
case
4
:
cs.setFilterFactory(
new
DiffuseRippleFilterFactory());
break
;
}
HttpSession session = request.getSession(
false
);
if
(session ==
null
) {
session = request.getSession();
}
setResponseHeaders(response);
String token = EncoderHelper.getChallangeAndWriteImage(cs,
"png"
, response.getOutputStream());
session.setAttribute(
"captchaToken"
, token);
System.out.println(
"当前的SessionID="
+ session.getId() +
",验证码="
+ token);
}
protected
void
setResponseHeaders(HttpServletResponse response) {
response.setContentType(
"image/png"
);
response.setHeader(
"Cache-Control"
,
"no-cache, no-store"
);
response.setHeader(
"Pragma"
,
"no-cache"
);
long
time = System.currentTimeMillis();
response.setDateHeader(
"Last-Modified"
, time);
response.setDateHeader(
"Date"
, time);
response.setDateHeader(
"Expires"
, time);
}
}
|