真的很大的問題。家庭作業再次。我幾乎沒有放棄試圖讓它工作,沒有足夠的時間了。我已經嘗試閱讀docs.oracle上所有關於安全性的內容,NetBeans上的所有安全性,類提供的所有內容(教科書不包含任何內容,所以不能將其歸咎於過時的書籍)和通過谷歌和許多問題在這裏一堆教程。我無法讓它工作。jsf2/glassfish3安全
我不是在尋找一個答案的功課,更是什麼,我需要看事物要仔細檢查,我可能俯瞰....
應用程序應該允許兩個用戶不同的羣體登錄。管理員用戶可以訪問所有內容,而用戶用戶只能訪問/ user/*。我們不限於嚴格的程序安全性,我們也不限於特定的聲明式安全。我們必須創建一個servlet來控制頁面流(就像我向教師提到的那樣,JSF帶有一個控制器,並且可以通過框架控制頁面流,但這已經不會影響他的決定)。如果有人當前沒有登錄在嘗試訪問其中一個受保護區域時,應根據我們的安全實施情況提示他們登錄/重定向到登錄頁面/無論登錄需要發生什麼。如果登錄的用戶用戶嘗試訪問管理員區域,他們應該提示他們不是管理員,沒有關於他們是否應該返回到他們所在的位置,註銷或提示以管理員身份登錄的詳細信息。唯一的要求是我們不能使用數據庫來存儲用戶名和密碼。
所以我在文件領域設置了兩個用戶,一個是User,一個是Admin。我嘗試將其設置爲基本身份驗證,當用戶運行該頁面時,它不提示登錄。我嘗試創建一個自定義登錄/登錄錯誤頁面和表單身份驗證,當用戶運行該頁面時,它不會顯示我的登錄表單。到目前爲止,我所能做的唯一事情就是將Login頁面作爲歡迎文件,並在表單提交時調用Servlet,並使用request.login(username,password)並在用戶登錄時記錄用戶領域和一切匹配。然後,我可以檢查角色並將事情設置在用戶的bean中,並根據指定的角色將它們轉發到適當的起始頁面。但是,如果我運行它並導航到另一個頁面,而無需在表單中輸入數據並將其提交到登錄頁面,則會顯示頁面。如果我以用戶角色登錄並導航到其中一個管理區域頁面,它可以讓我。我爲url設置了安全約束,我使用了我在這裏看到的用於不同URL的示例中的過濾器,並且它們不會被調用。
有可能是我錯過了一些簡單的東西,並且進入這個類不知道html和java以外的東西可能是最大的問題,並且我真的不知道我在這個類中如何處於邊界A. ..
除此之外還有更多的項目,但其餘不是我看到自己有問題,但我一直掛在這一週的安全部分大部分時間,並沒有甚至開始它。
的web.xml
<context-param>
<param-name>javax.faces.PROJECT_STAGE</param-name>
<param-value>Development</param-value>
</context-param>
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>Project2.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/Controller</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<security-constraint>
<display-name>AdminConstraint</display-name>
<web-resource-collection>
<web-resource-name>admin</web-resource-name>
<description/>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>Admin</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<display-name>UserConstraint</display-name>
<web-resource-collection>
<web-resource-name>user</web-resource-name>
<description/>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description/>
<role-name>User</role-name>
</auth-constraint>
</security-constraint>
<security-role>
<description/>
<role-name>User</role-name>
</security-role>
<security-role>
<description/>
<role-name>Admin</role-name>
</security-role>
</web-app>
login.xhtml
<f:view>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
<title>JSP Page</title>
</head>
<body>
<h1><h:outputText value="Welcome! Choose an action below."/></h1>
<form method="Post" action="Controller">
<h:inputText id="userName" value=""/>
<h:inputSecret id="password" value=""/>
<h:commandButton value="Login" type="submit"/>
</form>
</body>
</html>
</f:view>
到目前爲止,你做了什麼,看起來不錯。但在這裏看起來有點不對勁「但是如果我運行它並導航到另一個頁面而不輸入數據到表單並提交它登錄,頁面將顯示」。你能發佈你的web.xml和登錄頁面的代碼嗎? – Ravi 2012-07-08 08:27:21
@Ravi所以,在這裏粘貼代碼並對其進行格式化時,我注意到一些以前沒有顯示的東西或者我認爲已經刪除的東西。它被設置爲加載index.html作爲歡迎文件,我認爲我設置了Login.jsp,登錄設置爲FORM。所以它畢竟顯示了登錄頁面。在刪除FORM的標籤作爲登錄類型時,運行它會顯示彈出式登錄框,出於某種原因,我無法將它顯示在前面。儘管如此,它仍然可以讓我避開兩個網址的限制。也許與我的Glassfish服務器有關? – 2012-07-08 09:27:10
真的開始懷疑我是否有時在錯誤的web.xml中進行更改。但是Glassfish也很奇怪。它不斷清空用戶的領域或使團隊加倍。 – 2012-07-08 09:31:08