当前位置: 首页 > 面试题库 >

如何在glassfish中覆盖j_security_check?

诸龙野
2023-03-14
问题内容

我目前FORM在glassfish
v2.1中使用基于身份的身份验证来登录用户,并且工作正常。我想切换到该网站,ProgrammaticLogin并希望能够获得最初请求的URL(即在重定向到登录页面之前),并在我的程序化登录代码中使用它,以便在身份验证后将用户重定向回请求的页面。

我已经看过源代码j_security_check-在我的情况下,它是FormAuthenticator(catalina代码库),它将初始请求保存SavedRequest在会话中的对象中,但是该会话StandardSession不是,HttpSession因此没有直接方法可以访问它。

还是应该将身份验证机制从FORM其他更改?

谢谢!


问题答案:

好的,我找到了答案。所以这里是:

基本上,我想要实现的是在glassfish中实现基于openid的身份验证机制。这样做的一种方法是使用,ProgrammaticLogin但这有一些缺点-
没有简单的方法可以重定向回请求的URL,而编程身份验证意味着程序员需要做更多的工作。因此,在阅读之后,我找到了实现目标的更好方法-
服务器身份验证模块
或SAM。这是在所述的标准过程的一部分JSR-196和用于GlassFish的(比标准即不同创建可插拔AUTH模块提供了一种方法FORMBASIC等等)。通过此方法,您可以在保持声明式安全模型的同时将新的auth模块插入servlet容器。

因此,我要做的就是编写自己的自定义SAM。这是一个快速的方法:

  1. 实现ServerAuthModule接口,该接口主要归结为以下方法:

AuthStatus validateRequest(MessageInfo messageInfo, security.auth.Subject clientSubject, security.auth.Subject serviceSubject) throws AuthException

  1. 将SAM打包到一个jar中,然后将jar放在glassfish lib目录中。

  2. 配置SAM以与您的应用程序一起使用。分两个步骤完成:

    • 在domain.xml中将您的SAM定义为消息安全提供者。
    • 绑定SAM以与您的应用程序一起使用。您可以通过在应用程序的sun-web-app.xml中定义httpservlet-security-provider属性来实现。将属性的值设置为在步骤1中分配给SAM的名称。

有关更多信息,请阅读Ron
Monzillo撰写的精彩教程。

更新:
有一个更简单,更优雅的解决方案,称为AuthenticRoast。这是由Aike
Sommer编写的Java库,可让您编写自己的可插入身份验证器。



 类似资料:
  • 问题内容: 未正确探讨此问题。真正的问题在于。 原始问题中的第一个代码粘贴将产生预期的结果。但是,仍然需要注意。请参阅以下示例: 是 不 一样的 也就是说,不会自动调用与User对象关联的方法。 实际上 ,如果在模型上被覆盖,将生成以下描述。 摘要 这一切对我来说似乎很愚蠢。这似乎是在告诉我在指定类型时实际上并没有在调用。有人可以解释这里的实际情况吗? 任何可以帮助我解决这个问题的精灵都可以回答我

  • 问题内容: 我想创建一个具有任意大小的div,然后在该div上显示一些内容。完全按照CSS中下面的div定位和调整叠加层大小的最佳方法是什么? 问题答案: 您可以使用将叠加层放置在div内部,然后在各个方向上将其拉伸,如下所示: CSS 已更新* 您只需要确保您的父div为其添加了属性,并为其设置了更低的属性。 为下面的评论者制作了一个可以在所有浏览器(包括IE7 +)上运行的演示。 从CSS中移

  • 我想重写java中的getProperty()方法。util。物业类别,请告知。 1.Spring上下文文件 2.Java类 3.配置文件 仅供参考:我正在从配置文件中提取批次值,并希望在从中获取值后调用trim()。属性,以避免代码冗余,尝试重写getProperty()方法。 使用:Spring 4.0

  • 问题内容: 我正在尝试Backbone.js,而我正在尝试的事情之一就是调用远程API,因此,据我了解的文档资料,我需要能够覆盖Backbone.sync 。 在文档本身中没有如何执行此操作的示例,并且似乎没有用于Backbone的google组…有人可以指出执行此操作的示例吗? 问题答案: 看看这个带注释的源示例,在该示例中,它们被本地存储替代项覆盖 基本上,Backbone.sync应该是一个

  • 问题内容: 我试图覆盖Java中的方法。我有一堂课,基本上有2个数据字段和。现在,我想重写方法,以便可以在2个对象之间进行检查。 我的代码如下 但是当我写它给我错误时,因为方法只能比较并且是。 Solution 我按照建议使用运算符,问题解决了。 问题答案: Output: `run: – Subash Adhikari - VS - K false – Subash Adhikari - VS

  • 问题内容: 我需要方法方面的帮助,这非常令人讨厌。我尝试在线查找,因为那是一个正在搞砸的地方,即使在那里,它也“找不到2号Kid构造函数”,我什至会做其他事情,但它不起作用。好了,所以这是我的代码: 好的,所以我上面的toString(我知道,我的第三个参数已关闭,应该是String)已关闭。如果我在第三件事中硬编码一个值,它就会变成麻烦,并说找不到它(上面)。那么如何获取日期并将其拆分呢? 调用