JSF 身份验证:无法拦截错误消息

2024-05-23

我开发了一个简单的登录表单,用于我的 JSF + PrimeFaces 页面:

<form action="j_security_check" method="post"> 
    <p:dialog modal="true" header="Login" widgetVar="loginDlg">
        <h:panelGrid columns="3" cellpadding="5">  
            <h:outputLabel for="j_username">Username:</h:outputLabel> 
            <h:inputText id="j_username" required="true" /> 
            <h:message for="j_username" /> 
            <h:outputLabel for="j_password">Password:</h:outputLabel> 
            <h:inputSecret id="j_password" required="true" /> 
            <h:message for="j_password" /> 
            <br /> 
            <h:commandButton value="Login" /> 
        </h:panelGrid>
    </p:dialog>                
</form> 

尝试使用空密码,但丢失的密码(必需的)未被捕获h:message成分。我也切换到了p:commandButton认为问题可能出在按钮的 Ajax 行为中,但页面未呈现,因为 PrimeFaces 抱怨 CommandButton 不在表单元素内。容器抛出的异常是:

com.sun.enterprise.security.auth.login.common.LoginException: Login failed: Access denied on empty password for user pippo

总而言之,我有两个问题:

  1. 为什么在提交表单之前缺少密码不会产生消息?
  2. 如何捕获 LoginException 并在对话框中显示错误消息?

The j_security_check请求由 Web 容器处理,而不是由 JSF 处理。这解释了required="true"行不通的。仅当您使用 JSF 时才有效<h:form>和编程登录HttpServletRequest#login()在与命令按钮关联的操作方法中。

你能做的最好的事情就是配置一个<form-error-page> in web.xml指向与<form-login-page>。然后您可以检查请求是否已转发j_security_check本身,这意味着发生了登录错误。

<h:panelGroup rendered="#{requestScope['javax.servlet.forward.servlet_path'] == '/j_security_check'}">
    <h:outputText value="Unknown login, please try again" styleClass="error" />
</h:panelGroup>

使用这个代替<h:message>.

至于为什么<p:commandButton>抱怨没有表格只是因为你没有使用<h:form>.


无关针对具体问题,<form> (or <h:form>每当您决定切换到编程登录时)最好放在正文中<p:dialog>,不在外面。这<p:dialog>可以通过 JS 重新定位到正文的末尾,这将导致它不再处于表单中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSF 身份验证:无法拦截错误消息 的相关文章

  • JSF a4j:设置“禁用”时命令按钮不起作用

    当我在 a4j commandButton 上包含 disabled 属性时 不会执行该按钮的操作 去掉 禁用 属性会使其正常工作 我没有进行任何特殊的验证 据我所知 也没有看到任何验证错误消息 这是我的页面的一部分
  • Android Facebook SDK 4.5.0 登录注销问题,尝试再次登录时出现无效密钥哈希错误

    我按照中所述实现了 Facebook 登录按钮https developers facebook com docs facebook login android https developers facebook com docs face
  • 如何向 Scotty 中间件添加基本身份验证?

    我目前正在制作 Scotty API 但找不到任何 basicAuth 实现的示例 Wai Middleware HttpAuth 具体来说 我想将基本身份验证标头 用户 通行证 添加到我的某些端点 即以 admin 开头的端点 我已经设置
  • 如何以编程方式将文件上传到网站?

    我必须将文件上传到服务器 该服务器仅公开带有文件上传按钮的 jsf 网页 通过 http 我必须自动化一个进程 作为java独立进程完成 该进程生成一个文件并将文件上传到服务器 遗憾的是 必须上传文件的服务器不提供FTP或SFTP 有没有办
  • 如何在 GWT 中实现登录屏幕?

    我正在为后端应用程序编写一个小型 GWT 前端 我想知道 GWT 应用程序的最佳安全模型是什么 我正在考虑实现一种 RPC 方法 该方法从客户端网页接收用户密码的 MD5 然后将会话 ID 传回客户端页面 或失败代码 所有后续调用都将简单地
  • HttpURLConnection 在 Android 2.x 中工作正常,但在 4.1 中不行:未发现身份验证挑战

    我有一些典型的代码 它们使用 HttpURLConnection 来获取带有 URL 的文件 它们在 android 1 x 和 2 x 中运行良好 但在Android 4 1中失败了 我在网上搜索了一下 但几乎没有找到类似的信息 有人愿意
  • 如何使用 bcrypt 模块使用 NestJS 在 MongoDB 中保存加密密码

    如何将加密密码保存到 MongoDB 附 我是一名初学者开发人员 仍在学习如何使用 NestJS 如果您使用 TypeOrm 则有一个装饰器名称 插入之前 Entity YourTable schema yourdb export clas
  • SmartGIT 不要求 ssh 密钥

    切换到新计算机后 我必须再次安装 Windows 版 SmartGIT 现在尝试克隆我的 fedorahosted org repository 密钥存储在 C User myusername ssh SmartGIT 附带了全新安装 并且
  • Polymer 1.0:用户身份验证 UX(建议、教程和示例)?

    是否有推荐的 聚合物方式 来进行用户身份验证 这个问题包括技术部分和用户体验 用于进行用户身份验证的用户体验的全面示例 和 或教程 将非常棒 注意 Polymer 入门套件不包含任何身份验证 UX 示例 在这个问题中 用户体验 的意思是 完
  • 如何使用多重身份验证 - firebase?

    我有一个注册屏幕 其中包含 用户名 电子邮件 电话号码 密码 在本例中 我使用电话号码身份验证来验证号码 因此在用户验证他的号码后 我将他的数据保存到 firebase DB 中 所以在那之后 我将下摆导航到登录屏幕 应该包含电子邮件 密码
  • jsf中的会话注销问题

    我正在开发一个 Web 应用程序 并使用框架 jsf hibernate 和 spring 应用程序中有不同类型的用户 根据此处登录的用户类型 我为不同的用户类型启用菜单中的链接 用户登录后 会向用户提供菜单栏中的注销链接 我已经编写了 l
  • C# SMTP 身份验证失败,但凭据正确

    这是我的问题 我编写了以下程序来测试是否可以发送电子邮件 class Program static void Main string args try Console WriteLine Mail To MailAddress to new
  • laravel 4 登录验证失败

    在 Laravel4 中 我在路由中编写了以下代码 但它总是将我重定向到登录页面 我用谷歌搜索并在堆栈溢出上找到了它 并尝试了所有解决方案但没有成功 我确信这将是一个愚蠢的错误 但请跟踪它 谢谢 Routes Route post logi
  • Twitter 登录说明

    我想在 Android 中创建一个 Twitter 应用程序 为此 我想创建一个登录页面并登录到 Twitter 为此 我们需要消费者密钥和消费者密钥 这是什么意思 要创建此登录页面 除了 Twitter 帐户之外 我们还需要其他任何东西吗
  • 使用 Vaadin Flow Web 应用程序处理全局所有布局和“路由”URL 的登录

    Vaadin 8 在 Vaadin 8 中 在我的UI子类我通过检查用户的会话是否带有一个属性来处理登录 该属性表明他们是否已成功登录 如果没有的话 我的UI子类显示登录布局 而不是带有导航选项的其他内容 例如菜单栏和在该 UI 内切换布局
  • CakePHP 身份验证插件身份关联

    我正在使用 CakePHP 3 8 并迁移到身份验证插件 https book cakephp org authentication 1 1 en index html https book cakephp org authenticati
  • 我可以使用passport-google回调来验证android/ios用户吗?

    我有一个使用 google passport oauth2 进行身份验证的 node js 服务器 我的服务器端代码看起来像这样文档 https www npmjs com package passport google oauth2 au
  • 使用 AFNetworking 重置基本身份验证凭据

    我正在编写一个 REST 客户端 使用 AFNetworking 并且需要能够在应用程序的单个实例中触发新会话的创建 换句话说 我想 1 通过服务器进行身份验证2 进行一些 REST 调用3 模拟 注销 4 重新与服务器进行身份验证5 进行
  • iOS 相互认证

    我正在尝试在 IOS 5 中实现相互身份验证 但遇到了麻烦 NSUnderlyingError Error Domain kCFErrorDomainCFNetwork Code 1200 An SSL error has occurred
  • 如何获取之前的URL?

    我需要调用我的网络应用程序的 URL 例如 如果有一个从 stackoverflow com 到我的网站 foo com 的链接 我需要 Web 应用程序 托管 bean 中的 stackoverflow 链接 感谢所有帮助 谢谢 并不总是

随机推荐