java web容器_Java Web容器安全
这里的Java Web容器特指Tomcat,Tomcat依然是最流行的Java Web容器,你大爷还是你大爷。
本文并不涉及业务层面上的安全控制,只针对Tomcat自身所支持的相关安全控制功能与特性。
首先看一下Web容器的四个基本安全特性验证 Authentication
资源访问控制 Access control for resources
数据完整性 Data Integrity
数据机密性或私密性 Confidentiality or Data Privacy
每一项的细节这里不展开,并不难理解。
Java EE使用基于角色的访问控制——有用户、组、角色三个基本概念。
存储用户名和密码的地方叫Realm,有可能是文件,比如Tomcat的tomcat-users.xml,也可能是数据库,或者基于证书的机制。
Tomcat支持声明式验证和编程式验证,一个是基于XML配置,一个是通过代码实现。
声明式基本身份验证
在web.xml中定义
BASIC
同时可以定义角色
Admin User
admin
Manager
manager
针对路径做控制
Admin
/admin/*
admin
连HTTP方法也能配置
Manager
/manager/*
GET
POST
admin
manager
部署后,根据各服务器来配置用户和角色,比如Tomcat的就在conf/tomcat-users.xml里。
Tomcat的验证过程如下初次访问某个受保护的URI,Web容器会检查请求中是否包括Authorization头,如果没有,容器会返回401,以及WWW-Authenticate标头给浏览器,浏览器收到后会弹出对话框要求用户输入名称和密码。
如果用户输入用户名、密码正确后,浏览器会将用户名、密码以BASE64方式编码,然后放在Authorization标头中送出,容器进行验证,正确就将资源传回。
在关闭浏览器之前,对服务器的请求都包括Authorization头,服务器也每次都检查,所以登录有效期一直持续到关闭浏览器为止。
现在实验步骤如下
在Tomcat9目录下,修改conf/tomcat-users.xml文件,解注并新增admin的角色
在webapps目录下,新建test目录和/WEB-INF/web.xml文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaeehttp://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0"
metadata-complete="true">
Servlet and JSP Examples.
Servlet and JSP Examples
UTF-8
Example Security Constraint
Protected Area - Allow methods
/admin/*
DELETE
GET
POST
PUT
admin
manager
BASIC
admin
manager
新建/admin目录和/test.html文件,
输入正确后,查看请求可以看到Authorization头
注意这种方式几乎跟裸奔没区别,只要能拦截到你的HTTP请求,就相当于查看到你的密码。上面Basic后的字符串用base64解密就是tomcat:123456。
如果需要自定义登录窗口,可以配置
FORM
/login.html
/error.html
登录表单的action和name属性是有要求的
除了FORM和BASIC,还可以设置为DIGEST或CLIENT_CERT。DIGEST提交时传递的是MD5加密后的摘要,CLIENT_CERT使用的是Public Key Certificate(PKC)加密,客户端要安装证书。
如果要启用HTTPS,则在下设置
CONFIDENTIAL
默认值是NONE,还可以设置为INTEGRAL,不过习惯设为CONFIDENTIAL,效果一样。
设置完后,认证的时候会自动跳转为HTTPS
编程式安全管理
支持编程能带来更灵活的控制。HttpServletRequest里跟安全有关的方法有authenticate( ): 是否登录,如果没有,返回false,并会转到登录界面
login( ): 登入
logout( ): 登出
getUserPrincipal( ): 取得代表用户的Principal对象
getRemoteUser( ): 获得登录用户的名称
isUserInRole(String role): 传入角色名称,检查登录用户是否属于该角色
@WebServlet("/secret")
public class User extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
if (request.authenticated(response)) { // 检查登录 // 执行登录后的用户能够做的事情 }
}
@WebServlet("/login")
public class Login extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("user");
String password = request.getParameter("passwd");
try {
request.login(username, password);
response.sendRedirect("user");
} catch( ServletException ex) {
response.sendRedirect("login.html");
}
}
和对标的注解是@ServletSecurity,比如
@WebServlet("/admin")
@ServletSecurity(@HttpConstraint(rolesAllowed = {"admin"}))
就表示/admin只允许admin角色访问。
再看一个复杂一点的
@WebServlet("/admin")
@ServletSecurity(
value=@HttpConstraint(rolesAllowed = { "admin", "manager" }),
httpMethodConstraints = {
@HttpMethodConstraint(value = "GET", rolesAllowed = {"admin", "manager"},
transportGuarantee = TransportGuarantee.CONFIDENTIAL),
@HttpMethodConstraint(value = "POST", rolesAllowed = {"admin", "manager"}),
)
其它Realm
前面的例子都是把用户名密码放在配置文件里,这样带来一定的隐患,在Tomcat里也支持其它的Realm,比如JDBCRealm
DataSourceRealm
JNDIRealm
UserDatabaseRealm
MemoryRealm
JAASRealm
CombinedRealm
LockOutRealm
java web容器_Java Web容器安全相关推荐
- java开发简介_Java Web开发介绍
转自:http://www.cnblogs.com/pythontesting/p/4963021.html 简介 Java很好地支持web开发,在桌面上Eclipse RCP谈不上成功,JAVA是主 ...
- java web环境_java web
HTTP Status 500 - Request processing failed; nested exception is java.lang.NullPointerException HTTP ...
- java servlet原理_Java Web 深入分析(8) Servlet工作原理解析
Servlet Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态We ...
- java 实现 web 客户端_Java web客户端和服务器端交互的原理
Java web客户端和服务器端交互的原理 其实HTTP客户端和服务器端的交互原理很简单:即先是浏览器和服务器端建立Socket无状态连接,也就是短连接,然后通过IO流进行报文信息(这个报文是严格遵循 ...
- java web 教程_Java Web服务教程
java web 教程 Welcome to the Java Web Services Tutorial. Here we will learn about web services, useful ...
- web开发的java语言步骤_java web开发入门一(servlet和jsp)基于eclispe
servlet 用java语言开发动态资源网站的技术,在doGet方法中拼接显示html,在doPost方法中提交数据.类似于.net的ashx技术. servlet生成的class文件存放在tomc ...
- java web 刷新_Java Web项目的保存和刷新
java web 刷新 如何配置计算机以保存并刷新Java Web项目? 当您向开发人员提出此问题时,答案以"哦,好吧--"开头,并以某种可行的方式继续描述. 每个人都有自己的方式 ...
- java web 保护_java web项目请求控制及简单漏洞防范
背景:当时项目没用什么框架,过滤器,请求限制等都需要自己手写. 1.请求加时间戳 在后台过滤器中可以加判断,如果请求时间戳与服务器时间相差太大,可以返回异常,具体情况可以具体使用. 请求中加时间戳的示 ...
- java web后台_java web 后台那些事
java web 后台运行原理 当Web服务器接收到一个HTTP请求时,它会先判断请求内容--如果是静态网页数据,Web服务器将会自行处理,然后产生响应信息:如果牵涉到动态数据,Web服务器会将请求转 ...
最新文章
- 记一次有惊无险的 JVM 优化经历!
- C#获取和设置环境变量
- 滴滴顺风车GM:大多数产品经理定义是狭隘的
- mysql和jfinal的区别_mysql与JFinal的数据关系-阿里云开发者社区
- JavaScript get set方法 ES5 ES6写法
- WSO2 WSF/CPP 网络服务开发例子1--HELLO
- 阶段3 3.SpringMVC·_06.异常处理及拦截器_5 SpringMVC拦截器之编写controller
- bing翻译api php,Auto Tag Slug使用 google翻译并删除bing api key提示
- 恢复计算机个性化设置方法,Win7主题默认还原电脑用了主题软件没办法恢复完美解决系统主-win7主题...
- SCT2450QSTE 国产车规AEC-Q100 3.8V-36V 5A 高效同步降压 DCDC 转换器 替代TSP54540
- Excel ----- 身份证自动判断男女 公式
- MySQL DBLE_MySQL 中间件 - DBLE 简单使用
- HTML基础之 小白入门
- 以下python扩展库_以下对Python常用扩展库的描述错误的是哪一个选项?
- 发那科2021参数_三菱发那科常用参数对照表
- 算法——机器学习——无监督学习—— K均值(K-means)图解动画
- nginx NSS error -12263 (SSL_ERROR_RX_RECORD_TOO_LONG) 处理
- 【matlab】矩形窗/三角窗/hanning窗/hamming窗/blackman窗的频率响应图
- 好记性不如烂笔头——Vuex篇
- 管理后台服务通用化设计拙见
热门文章
- asp.net core 使用 AccessControlHelper 控制访问权限
- .net core编写转发服务
- 一个实时收集MySql变更记录的组件CanalSharp.AspNetCore
- 如何在ASP.NET Core程序启动时运行异步任务(3)
- 【活动(深圳)】告别2018之12.22 大湾区.NET Meet 大会 ,同时有网络直播
- .NetCore SkyWalking APM实现服务器监控环境安装及基础使用
- .net Kafka.Client多个Consumer Group对Topic消费不能完全覆盖研究总结(一)
- asp.net core源码飘香:Options组件
- [.NET Core].NET Core R2安装及示例教程
- MySQL-01:下载安装配置及初始化命令