一、概述
前面是扯犊子的,JSP/SERVLET基于HTTP规范,提供了几种安全支持,BASIC、DIGEST、FORM、CLIENT-CERT,本文主要介绍一下FORM的安全支持开发,文末有一个小demo用于展示。
因为FORM方式比较少用,因此本文介绍的原理点到即止,并没有特别特别深入,见谅。
更多详情,请参见《JSP/SERVLET核心编程》(新浪微盘,您找PDF的天堂···)
二、详细
1. 原理简述
FROM声明式安全基于表单验证。
简述:用户想要访问某一个受保护的资源,如果用户未登路,则将用户导向一个特定格式的表单进行身份验证,验证通过则继续访问资源;验证不通过,则将用户导向一个提示页面。
关键点:
a. 对受保护资源进行配置。本例是基于URL进行限制保护,因此需要在web.xml中配置受保护的URL;
b. 特定格式的表单写法。主要是三部分的固定写法,一是表单action必须为j_security_check,用户名输入input的name必须为j_username,用户密码的输入input的name必须为j_password;
c. 只要用户登录成功,并且支持cookie(会话cookie,跟session搭一块干活的那个cookie:JSESSIONID),那么这个用户名和密码就会被保存到当前用户的session中,后续只要用户的会话cookie存在并且服务器session未过期,则一直验证通过,否则验证失败,更多原理,请往下看;
FROM验证的安全性基于cookie/session机制的安全性,并且可以配置通过SSL传输,因此安全性还是比较高的,至少比BASIC的安全性高了不止一个等级。之前写的一个小demo,手动实现BASIC验证(不是基于JSP/SERVLET提供的封装了的BASIC,而是其底层原汁原味id实现):点击打开链接
d. 局限性。用户的身份验证,是基于服务器提供的用户角色,以tomcat为例,所有基于FORM的用户安全验证,都是基于tomcat user的安全验证。也就是说,能够通过用户验证的用户配置,都是属于tomcat_