基于表单的安全性约束中的Tomcat和Jaas身份验证servlet

问题描述 投票:0回答:1

我有一个安全约束,它涵盖了我的Web应用程序中的某些页面。认证是使用JAAS和表单进行的,并且可以正常工作。 (我已经成功实现了LoginModule)。

但是我需要通过servlet进行备用身份验证。

这是servlet的代码:

try {
    TokenCallbackHandler tokenCallbackHandler = new TokenCallbackHandler(properties,token);

    LoginContext lc = new LoginContext("myApp", tokenCallbackHandler);
    lc.login();
} catch (LoginException e) {
    e.printStackTrace();
}

调试代码,我看到初始化,登录和提交被正确地调用了。servlet返回一个带有js的html页面,该页面重定向到受保护的资源:

function doRedirect() {
    location.href = "/protectedPath/ProtectedResource.html";
}
window.setTimeout("doRedirect()", 1);

但是,当浏览器尝试获取受保护的页面时,应用程序服务器将返回登录页面。

我想念的是什么?通过js重定向,我有可能丢失会话cookie吗?或者,问题是否可能在于我正在尝试(通过重定向)从不受保护的资源访问受保护的资源?

-编辑---

我看过cookie:当我使用servlet登录时,它返回一个会话cookie,当我尝试获取受保护的资源时,我可以看到浏览器将该会话cookie传递给服务器,但是看来被拒绝,实际上它以另一个会话cookie响应,请转到登录表单页面

-编辑---

以另一种方式解决。

经过对tomcat身份验证机制的调查后,我意识到我试图做的事是错误的。

已经定义了一个安全约束和一个表单登录配置来保护我的资源,我告诉tomcat以其方式管理身份验证。因此,只要我不通过tomcat身份验证工作流程,我就无法身份验证任何内容。我还发现不可能在同一个Web应用程序中配置不同的登录配置,因此定义了表单身份验证会阻止我以其他方式进行身份验证。我可能需要的是BaseAuthenticator类(FormAuthenticator,BasicAuthenticator等的基类,包含相应登录配置的代码)的自定义实现,但是我不确定这可能是个好主意,也许是安全过滤器将是一个更好的解决方案。

知道有关tomcat中的安全过滤器的任何信息,我暂时设法解决了在servlet中模拟表单身份验证的问题(我知道确实很糟糕)。

java tomcat servlets jaas security-constraint
1个回答
0
投票

如果要认真进行身份验证和授权管理,应考虑使用完善的框架,例如Apache ShiroSpring Security。后者至少允许并发身份验证模式(基本的http和登录表单为默认设置,但还有许多其他可能的设置)

© www.soinside.com 2019 - 2024. All rights reserved.