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-constraint><web-resource-collection><web-resource-name>pages</web-resource-name><url-pattern>/pages/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>GET</http-method><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>security-role</role-name><role-name>protected-role</role-name></auth-constraint>
</security-constraint>
<security-constraint><web-resource-collection><web-resource-name>protected</web-resource-name><url-pattern>/pages/protected/*</url-pattern><http-method>PUT</http-method><http-method>DELETE</http-method><http-method>GET</http-method><http-method>POST</http-method></web-resource-collection><auth-constraint><role-name>protected-role</role-name></auth-constraint>
</security-constraint><security-role><role-name>security-role</role-name>
</security-role>
<security-role><role-name>protected-role</role-name>
</security-role>

如您所见,我们定义了两个角色:security-role和protected-role。 匹配模式/ pages / *的URL仅可由拥有角色security-role和protected-role的用户访问,而/ pages / protected / *下的页面仅限于具有protected-role角色的用户。

您可能会偶然发现的另一点是欢迎页面。 乍一看,您希望将登录页面指定为欢迎页面。 但这不起作用,因为Servlet容器的登录模块会自动将所有未经授权的访问重定向到登录页面。 因此,我们将应用程序的主页指定为欢迎页面。 这已经是一个受保护的页面,但是当用户直接调用其URL时,它将自动重定向到登录页面。

<welcome-file-list><welcome-file>pages/home.xhtml</welcome-file>
</welcome-file-list>

现在我们几乎完成了web.xml页面。 我们要做的就是定义身份验证方法以及登录页面和错误页面,以防用户输入无效的凭据时显示。 必须引起注意的是,这两个页面均不包含受保护的URL(例如CSS或JavaScript文件),否则,甚至禁止访问这两个页面,并且用户会看到Application Server特定的错误页面。

<login-config><auth-method>FORM</auth-method><form-login-config><form-login-page>/login.xhtml</form-login-page><form-error-page>/error.xhtml</form-error-page></form-login-config>
</login-config>

在将应用程序部署到JBoss Application Server的过程中,我们提供了一个名为jboss-web.xml的文件,该文件将我们的应用程序连接到安全域:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web><security-domain>java:/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 method="POST" action="j_security_check" id=""><h:panelGrid id="panel" columns="2" border="1" cellpadding="4" cellspacing="4"><h:outputLabel for="j_username" value="Username:" /><input type="text" name="j_username"/><h:outputLabel for="j_password" value="Password:" /><input type="password" name="j_password"/><h:panelGroup><input type="submit" value="Login"/></h:panelGroup></h:panelGrid>
</form>

下一步是实现一个简单的登录表单,该表单将其数据提交到登录模块。 注意输入字段的ID以及表单的操作。 这样,表单就被发布到登录模块,该模块从请求中提取输入的用户名和密码。 JSF开发人员可能想知道为什么我们使用标准HTML表单而不是元素。 这样做的原因是JSF表单元素跨越了自己的名称空间,因此输入字段的ID带有表单ID的前缀(并且此ID不能为空)。

如果用户已通过登录表单,我们将向他显示一个主页。 但是,只有拥有保护角色角色的用户才能访问受保护页面的链接。 这可以通过以下呈现条件来完成:

<h:link value="Protected page" outcome="protected/protected" rendered="#{facesContext.externalContext.isUserInRole('protected-role')}"/>

最后但并非最不重要的一点是,我们需要注销功能。 对于这种情况,我们实现了一个简单的后备bean,类似于以下实例,它使用户的会话无效并将其重定向回登录页面:

@Named(value = "login")
public class Login {public String logout() {FacesContext.getCurrentInstance().getExternalContext().invalidateSession();return "/login";}
}
  • 像往常一样,完整的源代码可以在github上找到。
参考: Martin's 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.html

jboss5.1安全性配置

jboss5.1安全性配置_使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全相关推荐

  1. 使用Java EE安全性和JBoss AS 7.x保护JSF应用程序的安全

    企业应用程序的常见要求是在登录页面后面保护所有JSF页面. 有时,您甚至希望在应用程序内部具有保护区,只有拥有特定角色的用户才能访问这些保护区. Java EE标准附带实现受某些安全性约束保护的Web ...

  2. java ee6教程_《Java EE 6 企业级应用开发教程》怎么样_目录_pdf在线阅读 - 课课家教育...

    第1章 java EE概述 1.1 Java EE的产生与发展 1.2 Java EE 6架构 1.3 Java EE 6常用技术 1.4 Java EE 6特性 1.5 Java EE 6应用服务器 ...

  3. java 程序增加 防盗_防盗Java EE –保护Java EE企业应用程序的安全

    java 程序增加 防盗 Øredev离我们仅有几天的路程,我受邀作了两次演讲. 其中之一是关于我最喜欢的主题:安全性和Java EE. 它旨在实现两个目标. 一方面向典型的Java EE开发人员介绍 ...

  4. java ee规范_测试Java EE 8规范

    java ee规范 Java EE 8平台肯定在过去的几个月中一直在发展. 规范已经发布了早期的草案评审,里程碑甚至最终版本. 实际上,随着JSF 2.3的发布,JSR-372才刚刚进入最终版本. 有 ...

  5. 黑马ee在职进阶视频_进阶– Java EE 7前端5强

    黑马ee在职进阶视频 系列继续. 在初步概述和Arjan关于最重要的后端功能的文章之后 ,我现在非常高兴让Ed Burns( @edburns )使用他最喜欢的Java EE 7前端功能完成本系列. ...

  6. java ee各类组件_在Java EE组件中使用骆驼路线

    java ee各类组件 从现在开始我一直在与Camel合作,我真的很喜欢它的简单性. 在Java EE之上使用它一直是一个挑战,我最近发表了一篇关于如何做到这一点的演讲,而在Java EE中引导Cam ...

  7. java ee开发环境_设置Java EE 6开发环境

    java ee开发环境 本教程简要说明了如何设置典型的环境来开发基于Java EE 6的应用程序. 除了可以正常工作的Windows XP客户端具有足够的CPU能力和内存外,本教程没有其他先决条件. ...

  8. java ee的小程序_在Java EE应用程序中实现自动重试

    java ee的小程序 最初,我想将此博客称为" 具有拦截器驱动的重试策略的灵活超时 ",但后来我认为它太"繁重". 该声明以及修改后的标题应该(希望)使您了解 ...

  9. java ee的小程序_扩展Java EE应用程序的基础

    java ee的小程序 老实说,"可扩展性"是一个详尽的主题,并且通常没有被很好地理解. 通常,它被认为与高可用性相同. 我已经看到新手程序员和"经验丰富"的建 ...

最新文章

  1. linux 初始化内存管理_Linux内存管理第二章 -- Describing Physical Memory
  2. head,branch,version,date
  3. 工作131:根据请求返回报错
  4. 一张图解决项目常见乱码问题
  5. R语言中识别和去除重复行
  6. 关于日志记录的一些感想
  7. Java调用Lua(转)
  8. 支持向量机的前世与今生
  9. 5.卷1(套接字联网API)---TCP客户/服务器程序示例
  10. CS224N刷题——Assignment1.11.2_Softmax神经网络基础
  11. Visual Studio 自定义控件不显示在工具箱
  12. Python中的输入输出(IO)
  13. python 把网页转换成Pdf格式下载到本地
  14. (六)软件测试的分工
  15. ios修改apn的插件_苹果iPhone查看和编辑APN方法教程
  16. mysql和mongo+查询效率_Mongodb VS Mysql 查询性能
  17. 速学计算机,新手电脑配置速成学习
  18. 纯OC实现iOS DLNA投屏功能了解一下
  19. 什么手机抢票软件安全靠谱
  20. 什么是SQL注入攻击以及如何防止SQL注入攻击

热门文章

  1. 【DP】Bovine Genetics G(P7152)
  2. 【期望】守卫挑战(金牌导航 期望-9)
  3. 【贪心】Sunscreen(poj 3614/luogu 2887)
  4. 【DP】【高精】WZK打雪仗(jzoj 1997)
  5. 【并查集】家族 (ssl 1896)
  6. mybatis源码阅读(二):mybatis初始化上
  7. 编译原理(一)之词法分析
  8. Hibernate之必须导入jar包
  9. hexo部署在码云出现样式问题
  10. Nginx中如何配置中文域名?