gpt4 book ai didi

Java和Jboss7 : j_security_check Custom Implementation

转载 作者:太空宇宙 更新时间:2023-11-04 07:47:10 25 4
gpt4 key购买 nike

我有这样的案例:登录表单使用DatabaseServerLoginModule - 所有身份验证数据都存储在单独表中的数据库中,我需要将标志j_usertype [从下拉列表]传递到j_security_checkDatabaseServletLoginModule可以在表之间切换并带来特定用户。

有什么想法......?

最佳答案

您可以轻松地向登录表单添加更多参数。当然,您需要编写自己的登录模块。问题是如何将添加的参数添加到登录模块中!

没有符合标准的方法可以向 j_security_check 添加额外参数(这很遗憾 - 很多人都需要这样做)。

但是,有一种巧妙的方法可以达到相同的效果。有一个不起眼但有用的安全规范,称为 Java Authorization Contract for Containers (JACC)。它可以做很多事情;更晦涩和有问题的一个是它为您提供了一种从调用堆栈中的任何位置访问与当前请求相关的各种对象的方法。您可以使用 PolicyContext 来执行此操作类,它有一个静态方法 getContext 。这从由字符串键标识的“策略上下文处理程序”获取对象。规范中需要一些此类处理程序,包括:

4.6.1.3 HttpServletRequest Policy Context Handler

All Servlet containers must register a PolicyContextHandler whose getContext method returns a javax.servlet.http.HttpServletRequest object when invoked with the key “javax.servlet.http.HttpServletRequest”. When this handler is activated, the container must return the HttpServletRequest object corresponding to the component request being processed by the container.

将它们放在一起,您可以执行以下操作:

HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext("javax.servlet.http.HttpServletRequest")

一旦您拥有HttpServletRequest ,可以通过 getParameter 轻松获取任意请求参数.

我有责任指出i am not the first person to suggest this 。这个答案还提出了稍微好一点的形式:

HttpServletRequest request = (HttpServletRequest)PolicyContext.getContext(HttpServletRequest.class.getName())

关于Java和Jboss7 : j_security_check Custom Implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15113231/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com