这种认证有两种体例:BASIC和DIGEST,BASIC验证要求客户端对用户名和密码进行BASE64编码后传送给处事器。DIGEST的认证体例的细节斗劲复杂,会经由一系列的加密,所以很难被破译。 JAVA供给一个用于启用身份认证的类,可以撑持HTTP和谈中的多个认证体例,这个类是java.net.Authenticator,使用体例如下:
* ]5 M( S+ ~" |6 N; L6 i Java 代码
, ~ `# H; }2 \' _4 z 1.package com.xixuyishi;
Y1 d: ?2 M& i* _1 [ 2.' ~: E; B: Y8 ~8 L
3.import java.io.BufferedReader;+ R% t! F: z+ z
4.import java.io.InputStream;
: R- x* I+ Z( y/ \& y- p 5.import java.io.InputStreamReader;+ o+ b* l9 n- z4 ^! w5 B6 S4 z
6.import java.net.Authenticator;
" i. A u; Q; b3 E 7.import java.net.PasswordAuthentication;
" P! ^" v& l" G- c% U 8.import java.net.URL;
$ _/ b& p' z/ O( W j7 E4 Y 9.7 z- o2 B4 q! P% V) l( [8 O
10.public class RunHttpSpnego {# ~9 h. [8 }: {; y4 H
11.& D' w+ a9 l( m1 [3 l) ~. }# Z
12. static final String kuser = "username"; // 用户名
8 j+ e0 \. y7 x0 X* I 13. static final String kpass = "password"; // 密码. O+ P- Z( ~# L& q- G* ^
14. static class MyAuthenticator extends Authenticator {- I6 {+ G0 }% D' ~. [( H& n
* U T _2 w D; G$ V) F$ h' ^ 16. @Override6 ]& ]# X. X- e [) N7 Y9 o: L
17. public PasswordAuthentication getPasswordAuthentication() {
* P: B8 f& J6 c3 o/ b 18. return (new PasswordAuthentication(kuser, kpass.toCharArray()));
3 Y3 v s' v; `2 q5 U; u1 c 19. }
6 r; {1 D0 D4 D6 [ 20. }7 T; k8 f) d# @) M/ k
21.) D2 F U, q0 P; z: p; P
22. public static void main(String[] args) throws Exception {
& D, a# e* d: v0 ]4 }9 V 23. Authenticator.setDefault(new MyAuthenticator());) U) u2 ^1 R4 m7 x2 m5 ?- a
24. URL url = new URL(args[0]);
J. ?- q% h' D/ s) q 25. InputStream ins = url.openConnection().getInputStream();& L: z2 U W* ]( [* y; @
26. BufferedReader reader = new BufferedReader(new InputStreamReader(ins));8 J9 a% G; e6 R& i0 C/ R$ f8 F
27. String str;2 M, c$ i' G" \) |8 z3 o
28. while ((str = reader.readLine()) != null)
' p) t4 \. V; a6 [7 a! X X4 \ 29. System.out.println(str);% p1 h0 Y7 n% a5 `5 Q! a5 g
30. }! u n/ y( w0 a- n; J) M
31.} |