写了一个最简单的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后显示出来了,还不错