日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java web容器_Java Web容器安全

發布時間:2023/12/4 java 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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容器安全的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。