gpt4 book ai didi

java - 如何使用自定义登录模块捕获响应状态 Tomcat JaasRealm

转载 作者:行者123 更新时间:2023-11-28 22:47:47 25 4
gpt4 key购买 nike

我正在使用带有自定义登录模块的 JaasRealm 的 Tomcat CMA。在这里,我重写了 boolean LoginModule#login() 方法。现在,每当请求进入 web 应用程序上下文时,首先它会通过此登录方法进行身份验证。因为,此登录方法具有 boolean 返回类型

  @Override
public boolean login() throws LoginException {

Callback[] callbacks = new Callback[2];

因此,如果返回值为 true,则它会继续完成进一步的请求,如果返回值为 false,则它会返回 401 Status。在某些情况下,当返回值为 false 时我想返回 401 状态以外的状态。但似乎这对我来说是不可能的。知道如何在 loginModule 返回 false 时发回修改后的状态作为响应。

最佳答案

您既不能影响登录模块中的响应,也不能影响 JAASRealm 中的响应,如果身份验证成功,这些类只会创建一个 Principal,否则为 null,位于该模块之上的 JAASRealm 会吞下所有异常。

所以,为了做到这一点,你应该

  • 扩展 JAASRealm,覆盖身份验证并抛出 AccountExpiredException/FailedLoginException/等。作为包装的未经检查的异常(自定义 RuntimeException)
  • 扩展 DigestAuthenticator 类并覆盖 doAuthenticate(或复制整个源代码,这绝对有效),在那里捕获您的自定义 RuntimeExceptions 并使用 response.sendError() 将响应代码设置为您想要的
  • 使用您的自定义 JAASRealm 类照常配置整个事情,CustomDigestAuthenticator 应该是 registered (我不知道是否有可能以一种不太全局化的方式来做到这一点)

可以找到类似的线程here

关于java - 如何使用自定义登录模块捕获响应状态 Tomcat JaasRealm,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52207244/

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