@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);
}
}