寫了一個最簡單的servlet登陸:
<bean id="credentialStore" class="org.archive.modules.credential.CredentialStore">
<property name="credentials">
<map>
<entry key="example-credential" value-ref="credential"/>
</map>
</property>
</bean>
<bean id="credential" class="org.archive.modules.credential.HtmlFormCredential">
<property name="domain" value="127.0.0.1:8080" />
<property name="loginUri" value="http://127.0.0.1:8080/TestLogin/loginServlet"/>
<property name="formItems">
<map>
<entry key="userName" value="aa"/>
<entry key="password" value="bb"/>
<entry key="submit" value="submit"/>
</map>
</property>
</bean>
loginUri的地址是表單要提交的地址,formItems中的key是提交控件的name,具體看
<a target=_blank href="https://webarchive.jira.com/wiki/display/Heritrix/HTML+Form+GET+or+POST">https://webarchive.jira.com/wiki/display/Heritrix/HTML+Form+GET+or+POST</a>
下面是另一種方法登陸:
<bean id="credential"
class="org.archive.modules.credential.HttpAuthenticationCredential">
<property name="domain">
<value>127.0.0.1:8080</value>
</property>
<property name="realm">
<value>.</value>
</property>
<property name="login">
<value>aa</value>
</property>
<property name="password">
<value>bb</value>
</property>
</bean>
這裏的realm的值要和java服務器中設置的
resp.setHeader("WWW-Authenticate", "Basic realm=\".\"");
realm相同。
解析發送過來的用戶名和密碼使用:
String auth = req.getHeader("Authorization");
得到的是Basic YWE6YmI=這種格式,後面這一串是用戶名和密碼的base64,解析出來是aa:bb
當得到的不是想要的值時使用
resp.setHeader("WWW-Authenticate", "Basic realm=\".\"");
resp.sendError(HttpServletResponse.SC_UNAUTHORIZED,"Authentication Failed: "); 返回401
當然非常感謝這篇文章:
http://blog.csdn.net/fanbird2008/article/details/7094737
順便再這篇文章中有些百度的圖片顯示不了,用fiddler修改referer後顯示出來了,還不錯