jboss as7 下载_JBoss AS 7:定制登录模块

jboss as7 下载

JBoss AS 7很整洁,但是文档仍然很缺乏(错误消息没有那么有用)。 这篇文章总结了如何创建自己的兼容JavaEE的登录模块,以对部署在JBoss AS上的Web应用程序的用户进行身份验证。 提供了一个工作的基本用户名密码模块。

为什么要使用Java EE标准认证? Java EE安全入门

Java EE规范的一部分是针对Web和EE应用程序的安全性,这使得在web.xml中指定声明性约束成为可能(例如,“角色X是访问URL“ / protected / *”的资源所必需的)”,并且以编程方式对其进行控制,即验证用户是否具有特定角色(请参见HttpServletRequest.isUserInRole )。

其工作方式如下:

  1. 您在web.xml中声明:
    1. 登录配置–主要是使用浏览器提示(基本)还是自定义登录表单以及登录领域的名称
      • 定制表单对发布操作和字段(以j_开头)使用“魔术”值,这些值由服务器拦截并处理
    2. 应用程序中使用的角色(通​​常是“用户”或“管理员”之类的角色)
    3. 访问特定的URL模式需要什么角色(默认值:无)
    4. 应用程序的某些部分是否需要HTTPS
  2. 您通常通过将其名称与配置中的可用登录模块之一(从简单的基于文件的用户列表到LDAP和Kerberos支持的模块)相关联,来告诉应用服务器如何针对该登录领域对用户进行身份验证。 您很少需要创建自己的登录模块,这是本文的主题。

如果这不是您的新手,那么我强烈建议您阅读Java EE 5教程–示例:保护Web应用程序 (使用JSP页面进行基于表单的身份验证,包括安全性约束规范,使用JAX-WS进行基本身份验证,保护企业Bean,使用isCallerInRole和getCallerPrincipal方法)。

为什么要打扰?

  • 声明式安全性与业务代码完全分离
  • 在Web应用程序与EJB之间传播安全性信息很容易(在EJB中,您可以通过xml或@RolesAllowed之类的注解声明性地保护完整的bean或特定方法)
  • 切换到其他身份验证机制(例如LDAP)很容易,并且很可能会支持SSO

自定义登录模块实施选项

如果JBoss 提供的现成的登录模块(也称为安全域)(例如UsersRoles,Ldap,Database,Certificate)不足以满足您的需求,则可以调整其中之一或实现自己的登录模块 。 您可以:

  1. 扩展其中一个具体模块,覆盖其一种或某些方法以适应您的需求-请参阅f.ex。 如何重写DatabaseServerLoginModule以指定您自己的存储密码加密方式。 这应该是您的主要选择。
  2. 子类UsernamePasswordLoginModule
  3. 如果需要最大的灵活性和可移植性,请实现javax.security.auth.spi.LoginModule(这是Java EE的一部分,即JAAS ,非常复杂)

JBoss EAP 5 安全指南 12.2。 自定义模块对基本模块(AbstractServerLoginModule,UsernamePasswordLoginModule)以及子类或其他任何标准模块的子类化如何进行了出色的描述,包括对实现/覆盖的关键方法的描述。 您必须阅读它。 (在这方面,该指南仍然完全适用于JBoss AS7 。)定制的JndiUserAndPass模块示例 (扩展了UsernamePasswordLoginModule)也值得一读–它使用模块选项和JNDI查找。

示例:自定义UsernamePasswordLoginModule子类

请参阅MySimpleUsernamePasswordLoginModule的源代码,该源代码扩展了JBoss的UsernamePasswordLoginModule

抽象的UsernamePasswordLoginModule ( 源代码 )通过比较用户提供的相等性密码与从子类实现的getUsersPassword方法返回的密码来工作。 您可以使用方法getUsername获取尝试登录的用户的用户名。

实现抽象方法

getUsersPassword()

实现getUsersPassword()可以在任何地方查找用户密码。 如果您未以纯文本格式存储密码,请阅读下面的方法,以了解如何自定义行为

getRoleSets()

实现getRoleSets()(来自AbstractServerLoginModule)以返回至少一个名为“ Roles”的组,其中包含分配给用户的0+个角色,请参阅此帖子的源代码中的实现。 通常,您会在某个地方查找用户的角色(而不是返回硬编码的“ user_role”角色)。

(可选)扩展initialize(..)以访问模块选项等。

通常,您还需要扩展initialize(Subject subject,CallbackHandler callbackHandler,Map sharedState,Map options) (每次身份验证尝试都需要调用),

  • 要获取通过安全域配置中的<module-option ..>元素声明的属性的值, 请参见JBoss 5定制模块示例
  • 要进行其他初始化,例如通过JNDI查找数据源–请参见DatabaseServerLoginModule

(可选)重写其他方法以自定义行为

如果您不以纯文本格式存储密码(明智的选择!),并且不支持开箱即用的哈希方法,则可以覆盖createPasswordHash(String username,String password,String摘要选项)来哈希/加密用户提供的密码密码与存储的密码进行比较之前。

或者,您可以重写validatePassword(String inputPassword,String ExpectedPassword)以在比较之前对密码进行任何转换,甚至可以进行除相等以外的其他类型的比较。

自定义登录模块部署选项

在JBoss AS中,您可以

  1. <JBoss AS 7> / modules /下 ,将登录模块类作为独立模块独立于Web应用程序部署在JAR中,并与module.xml一起部署-在JBossAS7SecurityCustomLoginModules中进行了描述
  2. 将登录模块类部署为webapp的一部分(不需要module.xml)
    1. 在WEB-INF / lib /中的JAR中
    2. 直接在WEB-INF / classes下

在每种情况下,您都必须在JBoss配置(standalone / configuration / standalone.xml或domain / configuration / domain.xml)中声明一个对应的安全域:

<security-domain name='form-auth' cache-type='default'><authentication><login-module code='custom.MySimpleUsernamePasswordLoginModule' flag='required'><!--module-option name='exampleProperty' value='exampleValue'/--></login-module></authentication>
</security-domain>

code属性应包含您的登录模块类的完全限定名称,并且安全域的名称必须与jboss-web.xml中的声明匹配:

<?xml version='1.0' encoding='UTF-8'?>
<jboss-web><security-domain>form-auth</security-domain><disable-audit>true</disable-audit>
</jboss-web>

代码

下载包含自定义登录模块MySimpleUsernamePasswordLoginModule 的webapp jboss-custom-login ,并按照README中的部署说明进行操作。

参考: The Holy Java博客上的JCG合作伙伴 Jakub Holy 在JBoss AS 7(及更早版本)中创建自定义登录模块 。


翻译自: https://www.javacodegeeks.com/2012/06/jboss-as-7-custom-login-modules.html

jboss as7 下载

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

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

相关文章

网站添加页面热力图--百度统计

1&#xff0c;注册百度统计的账户并登录 https://tongji.baidu.com/web/10000307684/welcome/login 2&#xff0c;新增网站 管理-网站列表-自有网站-新增网站 3&#xff0c;新增网页热力图 基础报告-页面点击图-新增点击图 4&#xff0c;复制统计代码 把统计的代码放到…

pandas中inplace_pandas回顾小结(二)

上一篇&#xff1a;橘猫吃不胖&#xff1a;pandas回顾小结&#xff08;一&#xff09;​zhuanlan.zhihu.comIndexIndex也有很多种类型&#xff0c;官方文档介绍&#xff1a;Index objects - pandas 1.1.4 documentationindex是可以包含重复值的df pd.DataFrame([[1,2,3],[4,5,…

beta总结

总结随笔 项目预期计划 完成Alpha阶段未完成的功能&#xff0c;并对Alpha阶段做出的项目做出一些修改&#xff0c;比如增加一些功能&#xff0c;美观页面等。 现实进展 经过7天的Beta冲刺&#xff0c;项目预期计划里所希望做得到的全部完成了&#xff0c;实现了增加学生老师&am…

统计网页访问量

1&#xff0c;注册账户&#xff0c;登录 https://www.umeng.com/ 2&#xff0c;生成统计代码 产品-网站统计-立即使用-添加站点-统计代码 生成的代码&#xff1a; <script type"text/javascript">document.write(unescape("%3Cspan idcnzz_stat_icon_…

Swing应用程序中的CDI事件可将UI与事件处理分离

在享受了几年围绕CDI构建我的代码的乐趣之后&#xff0c;使用它根据众所周知的模式来构造我的代码非常自然。 CDI是一种旨在在Java EE应用程序服务器中使用的依赖项注入机制&#xff0c;这可能被视为不利。 但是&#xff0c;我想证明它可以在Java SE应用程序中使用并且具有巨大…

keras 多层lstm_机器学习100天-Day2403 循环神经网络RNN(训练多层RNN)

说明&#xff1a;本文依据《Sklearn 与 TensorFlow 机器学习实用指南》完成&#xff0c;所有版权和解释权均归作者和翻译成员所有&#xff0c;我只是搬运和做注解。进入第二部分深度学习第十四章循环神经网络循环神经网络可以分析时间序列数据&#xff0c;诸如股票价格&#xf…

新手上路之django项目开发(一)-----创建项目并运行

一&#xff0c;创建项目 1&#xff0c;PyCharm创建 或者 2&#xff0c;django-admin startproject mysite mysite 是项目名。 二&#xff0c;配置settings.py文件 创建templates目录&#xff0c;static目录 settings.py文件中加入&#xff1a;os.path.join(BASE_DIR, ‘tem…

lisp语言画阿基米德线_中国油画艺术表达着艺术家思想情感,而且展现了油画语言独特之美...

感谢大家阅读&#xff0c;在阅读之前&#xff0c;麻烦您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c; 因为微信更改了推送规则&#xff0c;推文不再按照时间线显示&#xff0c;如果不点『在看』或者没有『星标』&#xff0c;可能就看不到我们的推送了&…

创建新的option

创建新的option element.add(new Option(value,date))https://www.cnblogs.com/duanhuajian/archive/2013/06/09/3129365.html 转载于:https://www.cnblogs.com/ar13/p/8139030.html

java btrace_BTrace for Java应用程序简介

java btrace本文的目的是学习如何使用BTrace动态跟踪/观察正在运行的Java应用程序&#xff08;JDK 6&#xff09;&#xff0c;而无需更改应用程序的代码和配置参数。 什么是BTrace&#xff1f; BTrace是一个开源项目&#xff0c;始于2007年&#xff0c;最初由A.Sundararajan和…

新手上路之django项目开发(二)-----引入静态文件

1&#xff0c;settings.py文件配置 STATIC_URL /static/STATICFILES_DIRS [os.path.join(BASE_DIR, static) ]2&#xff0c;html页面中引入 <script src"/static/jquery-1.11.1.min.js"></script>

python tkinter Listbox用法

python tkinter组件的Listbox的用法&#xff0c;见下面代码的演示&#xff1a; 1 from tkinter import *2 3 rootTk()4 vStringVar()5 #Listbox与变量绑定6 lb1Listbox(root,listvariablev)7 v.set((10,20,30,40,50))8 print(v.get())9 lb1.pack() 10 11 #.创建一个可以多选的…

我的世界javamod怎么装_「装修细节」除了中央空调外的高颜值装空调大法

一直觉得中央空调是高颜值神器但是对于我这种万年单身狗在考虑开启率的情况下好像还是风管机和挂机比较实用但是又嫌弃挂机的电线冷凝水管丑到不行直到我看到了-----管线背出的挂机仿佛开启了新世界的大门| 怎么做到的 |我问了好多卖中央空调的有没有管线背出的挂机都和我说不清…

在Spring Rest模板中跳过SSL证书验证

使用Spring Rest模板时如何跳过SSL证书验证&#xff1f; 配置Rest Template&#xff0c;以便它使用Http Client创建请求。 注意&#xff1a;如果您熟悉sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested ta…

新手上路之django项目开发(二)-----mysql数据库配置及其增删改查操作

1&#xff0c;数据库配置&#xff08;settings.py文件配置&#xff09; 我这里用的是本地数据库。 DATABASES {default: {ENGINE: django.db.backends.mysql,NAME: information,USER: root,PASSWORD: ,HOST: 127.0.0.1,PORT: 3306,} }NAME是数据库名称&#xff0c;USER是MYS…

C#编程高并发的几种处理方法

并发&#xff08;英文Concurrency&#xff09;&#xff0c;其实是一个很泛的概念&#xff0c;字面意思就是“同时做多件事”&#xff0c;不过方式有所不同。在.NET的世界里面&#xff0c;处理高并发大致有以下几种方法&#xff1a; 1&#xff0c;异步编程 异步编程就是使用futu…

lua检测表中是否有某个值_Lua检测数组(tabble)中是否包含某个值

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":9,"count":9}]},"card":[{"des":"兼容Redis协议标准的、提供持久化的内存数据…

rm删除文件显示:Operation not permitted

当需要删除某个文件夹或者文件时&#xff0c;提示Operation not permitted&#xff0c;表示不允许操作。 解决方法如图 chattr -i .user.ini 注释&#xff1a; rm -rf 目录名字 &#xff1a;删除 -r 就是向下递归&#xff0c;不管有多少级目录&#xff0c;一并删除 -f 就是直…

sublime 代码格式化

插件&#xff1a; SublimeAStyleFormatter Package Control Messages SublimeAStyleFormatter---------------------- SublimeAStyleFormatter SublimeAStyleFormatter is a simple code formatter plugin for Sublime Text 2. It provides ability to format C, C, C#, and J…

xslt 标签取集合第一条数据_1+x证书Web前端开发中级理论考试(试卷1)

2019年下半年 Web前端开发中级 理论考试 (考试时间19:00-20:30 共150分钟&#xff0c;测试卷1) 本试卷共3道大题&#xff0c;满分100分。请在指定位置作答。一、单选题(每小题2分&#xff0c;共30小题&#xff0c;共60分) 1、a标签中哪一个属性是表示跳转路径的(B) A&#xff…