patchca整合Spring MVC生成超炫的验证码

旧城等待, 2022-06-09 09:46 244阅读 0赞

http://lavasoft.blog.51cto.com/62575/1406947/

官方的色调单一,随机色也不随机,黑不拉几的,很难看。

为此做了扩展实现,并整合了spring mvc,生成的验证码漂亮多了。

官网:

http://code.google.com/p/patchca/

官方效果:

wKioL1NnwJ6T0piGAADqiyshHvE336.jpg

下面是我整合到spring并修扩展后的效果:

wKiom1NnwlHBHOQcAABo9oI9m30868.jpg

wKioL1NnwiaSHYETAABrSSZT-Ds292.jpg

wKiom1NnwlGCgi9JAABhSkh6GeM783.jpg

wKioL1NnwiezPiDPAABn7qmntfc845.jpg

wKiom1NnwlKQo8KbAABqKsp9TSk303.jpg

wKiom1NnwlLBjuR-AABp8fjIa-c497.jpg










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


    
}


}

Spring中无需多余配置,这样就好,相当的简单。

发表评论

表情:
评论列表 (有 0 条评论,244人围观)

还没有评论,来说两句吧...

相关阅读