当前位置: 首页 > 知识库问答 >
问题:

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

宦文柏
2023-03-14

我有一个安全约束,它覆盖了我的web应用程序中的一些页面。身份验证是用JAAS和form进行的,它工作得很好。(我已经成功实现了我的LoginModule)。

但是,我需要通过servlet进行另一种身份验证。

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

    LoginContext lc = new LoginContext("myApp", tokenCallbackHandler);
    lc.login();
} catch (LoginException e) {
    e.printStackTrace();
}
function doRedirect() {
    location.href = "/protectedPath/ProtectedResource.html";
}
window.setTimeout("doRedirect()", 1);

但当浏览器试图获取受保护的页面时,app服务器会返回到登录页面。

我错过了什么?有可能在js重定向时会丢失会话cookie?或者,问题是否可能是我试图(通过重定向)从一个不受保护的资源访问一个受保护的资源?

--编辑---

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

我对tomcat中的安全过滤器有所了解,因此暂时设法解决了在servlet中模拟表单身份验证的问题(我知道这真的很糟糕)。

共有1个答案

巫马泓
2023-03-14

如果您想要在身份验证和授权管理方面进行认真的工作,那么您应该使用一个成熟的框架,如Apache Shiro或Spring Security。后者至少允许并发身份验证模式(默认为基本http和登录表单,但也可能有许多其他形式)

 类似资料:
  • 我正在Spring Boot应用程序中学习Spring Security性,我试图了解默认情况下使用Spring Security性的身份验证方式。我知道Spring Security默认情况下使用基于表单的身份验证,但我使用基本身份验证对Postman进行了测试,结果正常。 我有一个非常简单的Spring Boot应用程序。 Rest控制器: 我在pom中添加了Spring Security依赖

  • 是否可以使用Kerberos但不使用JAAS来验证用户/密码?

  • 所以我正忙着为twitter开发一个应用程序,我希望人们使用PIN进行身份验证。(https://dev.twitter.com/oauth/pin-based). 要向人们显示PIN码,我需要使用以下命令:https://dev.twitter.com/oauth/reference/get/oauth/authorize 那里的例子说:https://api.twitter.com/oauth

  • 我有一个安装了apache tomcat 6.0.16的服务器,并且没有运行web应用程序。 但是我有一个Axis2.war,它承载的web服务很少。现在,在执行Qualsys安全漏洞检查后,它给出了以下结果: 任何建议都会有很大的帮助。

  • 问题内容: 我正在尝试为不同的URL模式定义两种不同的安全配置,其中一种使用表单登录,另一种使用对api的基本身份验证。 我正在寻找的解决方案与此处说明的解决方案类似,网址为http://meera- subbarao.blogspot.co.uk/2010/11/spring-security-combining-basic- and.html, 但我想这样做使用Java配置。 提前致谢。 这是

  • 我正在开发REST webService,我的一些客户机将使用我的webservices,所以为了识别真正的客户机,我决定给每个真正的客户机一个唯一的应用程序令牌。客户机将对这个令牌进行编码,他们将把这个令牌放在请求头中,我已经在我的REST webservices中配置了一个REST过滤器来验证令牌。我不想使用https。我的问题是,任何人都可以从我的客户端站点获取该令牌,并可以使用我的REST