Servlet存在并发问题,多个同类线程同时运行,可共享同一个Servlet实例,如果共享的数据和资源未合理同步,可能引起数据冲突
如何处理并发问题呢?——synchronized
Web应用中有六种属性范围
1:局部变量
线程安全?是
使用:任何对Servlet方法的局部处理
说明:局部变量对每个请求线程是唯一的
2:实例变量
线程安全?否
使用:
存储的数据涉及给定Servlet的多个请求
存储初始化参数(通常只读)
说明: 实例变量在给定servlet实例的每个请求间共享
java代码:•doPost(){
•//1
•String zy = req.getParameter("zy");
•//2
•
•//3
•if("1".equals(zy)){
this.doWork = this. doWork + 1;
•}else if("2".equals(zy)){
•this.notDoWork++;
•}else if("3".equals(zy)){
•this.bothSir++;
•}
•
•
•} 3:类变量
线程安全?否
使用:存储跨多个servlet定义的数据
说明:类变量在每个servlet实例的所有请求间共享
4:请求范围
线程安全?是
使用:将数据从控制器移动到用于表现的视图
API:ServletRequest接口
getAttributeNames() :Enumeration
getAttribute(name:String) :Object
setAttribute(name:String, value:Object)
removeAttribute(name:String)
5:会话范围
线程安全?否
使用:存储一个Web会话中通用的数据
说明:用户可能有多个浏览器活动,访问同一个Web应用
API:HttpSession接口
6:应用范围
线程安全?否
使用:Web应用中所有servlet共用的资源
API:ServletContext接口
Web应用存在安全问题
比如:认证、授权、维护数据完整性、跟踪访问(审计)、处理恶意代码、处理Web攻击等等
先一起来了解一下这些安全问题
认证是验证用户身份的过程,通常使用用户名和口令
可配置四种认证技术:
BASIC – Web浏览器接收用户名和口令,将其以明码方式发送给Web服务器
DIGEST – Web浏览器接收用户名和口令,使用加密算法将此数据发送给Web服务器
FORM. – Web应用提供发送给Web浏览器的HTML form
CLIENT-CERT – Web容器使用SSL验证用户
Web服务器会提供一组通用的安全服务,来帮助解决这些问题
授权
授权是根据用户角色划分Web资源的过程,其标识Web应用中的安全域。
Web容器使用厂商指定的机制验证用户角色
维护数据完整性
为维护数据完整性,可以使用加密方式传送保密数据,比如HTTPS
访问跟踪
访问跟踪,也称审计,是为Web应用的每次访问保留记录的过程,也就是审查日志信息
处理恶意代码
恶意代码是出于破坏系统的目的而设计的代码,Web容器可以使用Java的SecurityManager来隔离Web应用
处理Web攻击
Web攻击是外界想破坏服务器的企图,在Servlet规范中没有防止Web攻击的保护,可使用防火墙来避免此类问题
实现声明性授权,必须实现以下的工作
1:标识Web资源集
2:标识角色
3:将Web资源集映射到角色
4:标识每个角色中的用户
Web资源集定义示例:
java代码:
myRes
Javass Test
/javass/*
POST
GET
声明安全角色示例:
java代码:
myRes
/javass/*
POST
GET
student
安全角色定义示例:
java代码:
test role
student
安全领域( Security Realm )
1:Security realm是将用户与角色相匹配的软件组件,其也验证用户口令
2:每个Web容器必须包括一个security realm,但该机制与厂商相关
3:可以不配置,使用服务器缺省的实现,比如普通文件的方式
使用部署描述符可声明Web应用的认证技术:
auth-method元素可取如下四值之一:BASIC、DIGEST、FORM、CLIENT-CERT
基于Form的认证
在web.xml中的配置如下所示:
java代码:
FORM
Constraint
/login/form.html
/login/error.html
还需要自己编写form登录页面,要注意里面名称的写法:
Web容器截获j_security_check动作,并处理认证,不需要自己编码
在tomcat里面的配置:
java代码:在tomcat的\conf目录下找到tomcat-users.xml文件,在其中增加
然后尝试访问/javass/下面的任何页面试试看
生成keystore
使用JDK自带的keytool来生成一个证书。
比如:keytool -genkey -alias javass -keyalg RSA -keystore c:\javass.keystore
注意:tomcat的密码和keystore的密码必须一样
修改tomcat的server.xml,找到ssl配置的地方,去掉注释,修改成如下:
如果是tomcat7和win7的系统,需要修改protocol。另外两个属性为新添加的。
可以以https去访问了,注意端口号是8443了
强制使用https的配置
java代码:
一样的
CONFIDENTIAL
CLIENT-CERT
Constraint
要注意一点,这里并没有真正实现CLIENT-CERT,因为CLIENT-CERT对客户端的认证需要数字证书,过程较为繁琐,这里就不去讲述了。
专业的数字证书通常是收费的,一个客户端一个,而且价格不菲,比如国内的CA证书、国际上的Verisign、GeoTrust、Thawte等等。
视频配套PPT,视频地址【
Java WEB开发实战视频课程 】
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26715443/viewspace-717366/
,如需转载,请注明出处,否则将追究法律责任。