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

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安全性配置

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/345089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

分布式事务 camel_使用Camel在Amazon上构建分布式工作流应用程序

分布式事务 camel带有SNS-SQS的管道 工作流由以动态条件确定的特定顺序执行的独立任务组成。 工作流通常代表业务流程&#xff0c;例如电子商务商店中的订单处理步骤。 Amazon Web Services提供了用于构建分布式和可伸缩工作流应用程序的各种工具。 构建此类应用程序的一种方法…

比较Java REST文档框架

确定在记录REST API时选择哪种Java框架可能很麻烦。 在本博文中&#xff0c;我们将简要比较我们自己使用的REST Web服务的三种文档框架&#xff0c;以及它们如何与Spring框架&#xff08;这是Foreach最常使用的Java框架&#xff09;集成。 这些是RESTful API建模语言&#xff0…

jaVa游戏三国志英杰传,《三国志英杰传》到底是怎样的一款游戏

原标题&#xff1a;《三国志英杰传》到底是怎样的一款游戏介绍作为PC平台上经典的战棋策略类游戏&#xff0c;英杰传系列可谓把这一类型游戏在战略性和资源获取上的精髓发挥的淋漓尽致。系列初代的《三国志英杰传》诞生在1995年的DOS系统上&#xff0c;虽然我接触英杰传时已经是…

jvm 内存镜像_镜像镜像–使用反射在运行时查看JVM内部

jvm 内存镜像开发人员&#xff1a;Takipi会告诉您何时新代码在生产中中断– 了解更多 我们都习惯于在我们的日常工作中直接或通过利用反射的框架来运用反射。 它是Java和Scala编程的主要方面&#xff0c;它使我们使用的库可以与我们的代码进行交互&#xff0c;而无需对其进行硬…

谁去过顽皮,谁去过尼斯? 圣诞老人为您提供Java 11建议!

有没有想过圣诞老人如何为世界各地的孩子们送上节日礼物&#xff1f; 有20亿个孩子&#xff0c;每个孩子都有自己的愿望清单&#xff0c;他会在24小时内完成。 这意味着每个孩子平均需要43微秒&#xff0c;他需要检查每个孩子是否顽皮或好。 您无需再怀疑了。 我会透露这个秘密…

php时间格式函数,PHP函数之日期时间函数date()使用详解_php基础_脚本

$ttime();echo date("Y-m-d H:i:s",$t);第一个参数的格式分别表示:a - "am" 或是 "pm"A - "AM" 或是 "PM"d - 几日&#xff0c;二位数字&#xff0c;若不足二位则前面补零; 如: "01" 至 "31"D - 星期几…

play框架配置 拦截器_如何使用Play框架为https配置SSL证书

play框架配置 拦截器我花了几个小时试图使它起作用&#xff0c;最后&#xff0c;问题是我自己没有使用keytool生成CSR&#xff08;证书请求&#xff09;。 当我尝试通过https访问Play时&#xff0c;我一直收到此错误&#xff1a; javax.net.ssl.SSLPeerUnverifiedException&a…

matlab 球坐标绘图,MATLAB绘制地图

1使用向量绘制地图1.1绘制全球海岸线向量数据可以表示一个地图。这种向量存在的形式是一系列的经纬度或投影坐标对&#xff0c;它们代表一个点集、一个线条或者多边形。例如&#xff0c;描绘出行政区域边界的点、公路系统、城市的中心或者以上三个集合放在一起&#xff0c;都可…

php 有 stringbuffer,String、StringBuffer、StringBulider三者介绍

三者都实现了CharSequence接口&#xff0c;因此CharSequence可认为是一个字符串的协议接口1.String类是不可变类&#xff0c;即一旦一个String对象被创建后&#xff0c;包含在这个对象中的字符序列是不可改变的&#xff0c;直至这个对象被销毁&#xff1b;我们常常定义的时候 S…

php生成网页按钮,JavaScript实现自动生成网页元素功能(按钮、文本等)_javascript技巧...

创建元素的方法&#xff1a;1、利用createTextNode()创建一个文本对象2、利用createElement()创建一个标签对象3、直接利用容器标签中的一个属性&#xff1a;innerHTML-----本质上改该标签容器中的“html代码”&#xff0c;不是我们认为的对象树的操作详解代码&#xff1a;这是…

adf 自动输稿器_在ADF实体PK属性中使用MySQL自动增量PK列

adf 自动输稿器大家好。 继续进行ADF MySQL解决方法系列&#xff0c;今天我们将看到需要做些什么才能将MySQL PK自动增量列与ADF实体PK属性一起使用。 如果使用的是Oracle数据库&#xff0c;则可以使用oracle.jbo.domain.DBSequence以及序列和触发器来立即进行操作。 为简单起…

探索适用于Apache Spark的Spline Data Tracker和可视化工具(第1部分)

最近引起我注意的一个有趣且充满希望的开源项目是Spline &#xff0c;它是由Absa维护的Apache Spark的数据沿袭跟踪和可视化工具。 该项目由两部分组成&#xff1a;一个在驱动程序上工作的Scala库&#xff0c;该驱动程序通过分析Spark执行计划来捕获数据沿袭&#xff0c;并提供…

高性能mysql 聚簇索引,高性能MySQL笔记-第5章Indexing for High Performance-005聚集索引...

一、聚集索引介绍1.什么是聚集索引&#xff1f;InnoDB’s clustered indexes actually store a B-Tree index and the rows together in the same structure.2.为什么一张表只能一个聚集索引&#xff1f;When a table has a clustered index, its rows are actually stored in …

PHP应用GD2函数填充几何图形,使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)...

使用GD2函数绘制几何图形(PHP图形图像的典型应用教程4)本篇主要讲解使用GD2函数实现几何图形的绘制&#xff0c;首先我们需要的事创建一个图像&#xff0c;在之前的文章中我们就说过了&#xff0c;创建图像是所有图像操作的第一步&#xff0c;然后再背景上根据坐标点绘制图形轮…

API测试和自动化101:基本指南

API代表A pplication P AGC软件我覆盖整个院落。 通常&#xff0c;API用于通过使用任何通信方式来促进两个不同应用程序之间的交互。 在网络上使用API​​时&#xff0c;我们将其称为“ Web服务”。 最近&#xff0c;API已成为编程的Struts。 与在应用程序中一样&#xff0c;编…

oracle数据库安装HotSpot,安装Oracle数据库软件遭遇诡异的HotSpot Virtual Machine Error : 11报错...

虽然也装了很多次的数据库了&#xff0c;可是偶尔还是会碰见一些很无语的错误&#xff0c;前两天在RHEL5.0上安装Oracle 10g 10.2.0.1&#xff0c;起图形后点击下虽然也装了很多次的数据库了&#xff0c;可是偶尔还是会碰见一些很无语的错误&#xff0c;前两天在RHEL5.0上安装O…

linux结束所有任务命令行,Linux基础命令(15)定时任务

释放双眼&#xff0c;带上耳机&#xff0c;听听看~&#xff01;crontadLinux定时任务Crontab命令详解linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作&#xff0c;因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设…

如何修复无效的目标版本:Maven Build中的1.7、1.8、1.9或1.10错误

如果您正在使用Maven构建Java项目&#xff0c;可能是在Eclipse中&#xff0c;或者是通过运行mvn install在命令提示符下构建的&#xff0c;并且构建失败并显示诸如“无效的目标发行版&#xff1a;1.7”或“无效的目标发行版&#xff1a;1.8”之类的错误&#xff0c;那么您来了到…

Linux查看时间段文件,Linux查看特定时间段内修改过的文件

一.Linux系统日志的一些信息&#xff0c;日志配置文件syslog.conf系统日志一般都存在/var/log下常用的系统日志如下:核心启动日志:/var/log/dmesg系统报错日志:/var/log/messages邮件系统日志:/var/log/maillogFTP系统日志:/var/log/xferlog安全信息和系统登录与网络连接的信息…

使用ClickHouse UDF与OpenAI模型集成

本文字数&#xff1a;14683&#xff1b;估计阅读时间&#xff1a;37 分钟 作者&#xff1a;Dale McDiarmid 审校&#xff1a;庄晓东&#xff08;魏庄&#xff09; 本文在公众号【ClickHouseInc】首发 Meetup活动 ClickHouse Shenzhen User Group第1届 Meetup 火热报名中&#x…