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,一经查实,立即删除!

相关文章

java comparator相等_详解Java中Comparable和Comparator接口的区别

详解Java中Comparable和Comparator接口的区别发布于 2020-7-20|复制链接摘记: 详解Java中Comparable和Comparator接口的区别本文要来详细分析一下Java中Comparable和Comparator接口的区别&#xff0c;两者都有比较的功能&#xff0c;那么究竟有什么区别呢&#xff0c;感兴趣的J…

Java 11:运行单文件程序和“ shebang”脚本

在Java 11中&#xff0c;对java启动器进行了增强&#xff0c;使其可以直接运行单文件源代码程序&#xff0c;而不必先对其进行编译。 例如&#xff0c;考虑以下仅添加其参数的类&#xff1a; import java.util.*; public class Add {public static void main(String[] args) …

update core.php 更新_PHP: 更新日志 - Manual

8.0.0The format character p has been added.Prior to this version, false was returned on failure.Prior to this version, false was returned on failure.These functions no longer return false on failure.callback 回调现在可以为空(nullable)。scale is now nullabl…

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

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

php登陆框_PHP 登录完成跳转上一访问页面

需求描述&#xff1a;访问网站页面时&#xff0c;有的页面需要授权才能访问&#xff0c;这时候就会要求用户登录&#xff0c;跳转到登录页面login.php&#xff0c;怎么实现登录后返回到刚才访问的页面。解决思路1&#xff1a;在跳转到登录页面之前要将当前访问页面的url保存到c…

比较Java REST文档框架

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

php 获取文件最后几行,php获取文件的最后N行数据

本篇文章介绍的内容是php获取文件的最后N行数据&#xff0c;现在分享给大家&#xff0c;也可以给有需要的朋友一个参考GitHub源码代码是基于以下问题&#xff0c;给出的解决方案&#xff1a;用php写一个函数&#xff0c;获取一个文本文件最后$n行内容&#xff0c;要求尽可能效率…

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

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

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

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

【渝粤题库】广东开放大学 微信平台开发与应用 形成性考核 (2)

选择题 题目&#xff1a; 以下哪些功能是属于微信的&#xff1f; 题目&#xff1a; 认证过的订阅号的底部是否可以直接链接到外部链接&#xff1f; 题目&#xff1a; 下面哪些属于页面前端开发技术&#xff1f; 题目&#xff1a; 那种情况下的公众号可以申请微信支付&#xff1…

php微信小程序获取用户信息,微信小程序获取openid及用户信息的方法

本文主要介绍微信小程序如何获取openid及用户信息&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下&#xff0c;希望能帮助到大家。1. 获取openid1.1 获取code调用接口获取登录凭证(code)进而换取用户登录态信息&#xff0c;包括用户的唯一标识(openid…

【渝粤题库】广东开放大学 服务标准化 形成性考核

​&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;以下关于本课程终考的描述正确的是&#xff1f; 题目&#xff1a;以下哪种方式能判断已发布的形考是否都做了&#xff1f; 题目&#xff1a;作为专业方向课&#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 - 星期几…

【渝粤题库】广东开放大学 物业财税管理基础 形成性考核

选择题 题目&#xff1a;企业将资金以购买债券、提供借款或商业信用等形式出借给其他单位&#xff0c;这是一种&#xff08; &#xff09;的财务关系。 题目&#xff1a;&#xff08; &#xff09;是指买卖双方成交后&#xff0c;在双方约定的未来某一特定的时日才交割的交易市…

【渝粤题库】广东开放大学 统计基础 形成性考核

选择题 题目&#xff1a; 对某城市工业企业未安装设备进行普查&#xff0c;总体单位是&#xff08; &#xff09;。 选择一项&#xff1a; 题目&#xff1a; 某地"国内生产总值”这一统计指标属于&#xff08; &#xff09;。 选择一项&#xff1a; 题目&…

java无符号 uuid,java实现无符号数转换、字符串补齐、md5、uuid、随机数示例

package com.hongyuan.test;import java.security.messagedigest;import java.security.nosuchalgorithmexception;import java.util.random;import java.util.uuid;/** 杂项(无符号数转换&#xff0c;字符串补齐&#xff0c;md5,uuid,随机数)*/public class sundrytest {//转成…

【渝粤题库】广东开放大学 质量管理 形成性考核

​&#x1f449;关注我,看答案&#x1f448; 选择题 题目&#xff1a;可以通过哪些形式登陆学校的课程平台进行学习&#xff1f; 题目&#xff1a;以下关于课程勋章的说法&#xff0c;哪些是“正确”的&#xff1f; 题目&#xff1a;在“疑难解答区”发帖时&#xff0c;哪种类型…

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

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

【渝粤题库】陕西师范大学100141大学英语(三)作业 (专升本、高起本)

交际与对话 针对每个对话中未完成的部分有4个选项&#xff0c;请从A、B、C、D四个选项中选出正确选项。 a. What do you think of the speech given by Professor Smith? b. . But I’m not particularly interested in the topic. A. Let me think about it. B. Not bad. C.…