经典的jq查询网站,西宁做网站君博专注,厦门维品网站建设,网站制作需要多少钱一年jboss5.1安全性配置企业应用程序的一个常见要求是在登录页面后面保护所有JSF页面。 有时#xff0c;您甚至希望在应用程序内部具有保护区#xff0c;只有拥有特定角色的用户才能访问这些保护区。 Java EE标准附带了实现受某些安全性约束保护的Web应用程序所需的所有方法。 在… jboss5.1安全性配置 企业应用程序的一个常见要求是在登录页面后面保护所有JSF页面。 有时您甚至希望在应用程序内部具有保护区只有拥有特定角色的用户才能访问这些保护区。 Java EE标准附带了实现受某些安全性约束保护的Web应用程序所需的所有方法。 在此博客文章中我们希望开发一个简单的应用程序以演示这些方法的用法并展示如何为两个不同的角色构建完整的JSF应用程序。 由于该解决方案乍看之下可能会直截了当因此有一些陷阱需要注意。 我们要关心的第一点是应用程序的文件夹布局。 我们有三种不同的页面 所有用户都应该可以访问登录页面和错误页面。 我们有一个主页只有经过身份验证的用户才能访问。 我们有一个受保护的页面该页面仅对角色protected-role的用户可见。 因此将这三种类型的页面放在三个不同的文件夹中根文件夹src / main / webapp文件夹src / main / webapp / pages和受保护的页面位于src / main / webapp / pages / protected web.xml文件是定义我们要使用的角色以及如何将某些URL模式的可访问性映射到这些角色的位置 security-constraintweb-resource-collectionweb-resource-namepages/web-resource-nameurl-pattern/pages/*/url-patternhttp-methodPUT/http-methodhttp-methodDELETE/http-methodhttp-methodGET/http-methodhttp-methodPOST/http-method/web-resource-collectionauth-constraintrole-namesecurity-role/role-namerole-nameprotected-role/role-name/auth-constraint
/security-constraint
security-constraintweb-resource-collectionweb-resource-nameprotected/web-resource-nameurl-pattern/pages/protected/*/url-patternhttp-methodPUT/http-methodhttp-methodDELETE/http-methodhttp-methodGET/http-methodhttp-methodPOST/http-method/web-resource-collectionauth-constraintrole-nameprotected-role/role-name/auth-constraint
/security-constraintsecurity-rolerole-namesecurity-role/role-name
/security-role
security-rolerole-nameprotected-role/role-name
/security-role 如您所见我们定义了两个角色security-role和protected-role。 匹配模式/ pages / *的URL仅可由拥有角色security-role和protected-role的用户访问而/ pages / protected / *下的页面仅限于具有protected-role角色的用户。 您可能会偶然发现的另一点是欢迎页面。 乍一看您希望将登录页面指定为欢迎页面。 但这不起作用因为Servlet容器的登录模块会自动将所有未经授权的访问重定向到登录页面。 因此我们将应用程序的主页指定为欢迎页面。 这已经是一个受保护的页面但是当用户直接调用其URL时它将自动重定向到登录页面。 welcome-file-listwelcome-filepages/home.xhtml/welcome-file
/welcome-file-list 现在我们几乎完成了web.xml页面。 我们要做的就是定义身份验证方法以及登录页面和错误页面以防用户输入无效的凭据时显示。 必须引起注意的是这两个页面均不包含受保护的URL例如CSS或JavaScript文件否则甚至禁止访问这两个页面并且用户会看到Application Server特定的错误页面。 login-configauth-methodFORM/auth-methodform-login-configform-login-page/login.xhtml/form-login-pageform-error-page/error.xhtml/form-error-page/form-login-config
/login-config 在将应用程序部署到JBoss Application Server的过程中我们提供了一个名为jboss-web.xml的文件该文件将我们的应用程序连接到安全域 ?xml version1.0 encodingUTF-8?
jboss-websecurity-domainjava:/jaas/other/security-domain
/jboss-web 在standalone.xml中配置了“其他”安全域。 默认配置要求用户传递“ RealmUsersRoles”登录模块该模块从配置文件夹中的两个文件application-users.properties和application-roles.properties获取其用户和角色定义。 您可以使用提供的添加用户脚本将新用户添加到该领域 What type of user do you wish to add?a) Management User (mgmt-users.properties)b) Application User (application-users.properties)
(a): bEnter the details of the new user to add.
Realm (ApplicationRealm) :
Username : bart
Password :
Re-enter Password :
What roles do you want this user to belong to? (Please enter a comma separated list, or leave blank for none) : security-role,protected-role
About to add user bart for realm ApplicationRealm
Is this correct yes/no? yes 在这里重要的是选择正确的领域ApplicationRealm因为默认情况下在standalone.xml中为“其他”登录模块配置了该领域。 这也是您以逗号分隔列表的形式提供用户所拥有的角色的地方。 form methodPOST actionj_security_check idh:panelGrid idpanel columns2 border1 cellpadding4 cellspacing4h:outputLabel forj_username valueUsername: /input typetext namej_username/h:outputLabel forj_password valuePassword: /input typepassword namej_password/h:panelGroupinput typesubmit valueLogin//h:panelGroup/h:panelGrid
/form 下一步是实现一个简单的登录表单该表单将其数据提交到登录模块。 注意输入字段的ID以及表单的操作。 这样表单就被发布到登录模块该模块从请求中提取输入的用户名和密码。 JSF开发人员可能想知道为什么我们使用标准HTML表单而不是元素。 这样做的原因是JSF表单元素跨越了自己的名称空间因此输入字段的ID带有表单ID的前缀并且此ID不能为空。 如果用户已通过登录表单我们将向他显示一个主页。 但是只有拥有保护角色角色的用户才能访问受保护页面的链接。 这可以通过以下呈现条件来完成 h:link valueProtected page outcomeprotected/protected rendered#{facesContext.externalContext.isUserInRole(protected-role)}/ 最后但并非最不重要的一点是我们需要注销功能。 对于这种情况我们实现了一个简单的后备bean类似于以下实例它使用户的会话无效并将其重定向回登录页面 Named(value login)
public class Login {public String logout() {FacesContext.getCurrentInstance().getExternalContext().invalidateSession();return /login;}
} 像往常一样完整的源代码可以在github上找到。 参考 Martins Developer World博客上的JCG合作伙伴 Martin Mois 提供了Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全 。 翻译自: https://www.javacodegeeks.com/2014/01/securing-a-jsf-application-with-java-ee-security-and-jboss-as-7-x.htmljboss5.1安全性配置