1

我有一个使用 ejb(单独部署)的 Web 应用程序,登录是通过 JAAS 处理的。在当前会话期间,在身份验证后访问不安全的 url时,我可以获得调用者主体吗?

更多细节如下。

ejb:

简单 EJB 在 WAS (WebShere 7) 中注册。它有一种打印主体的方法:

ctx.getCallerPrincipal().getName();

网络应用程序:

Web 应用程序(单独部署)有 2 个 servlet。一个映射到不安全的路径,另一个是安全的,即它的路径注册web.xml在下<security-constraint>。Servlet 将 EJB 注入其中(通过@EJB注解)。EJB 绑定有效。Webapp 使用基于表单的身份验证,使用 JAAS:有一个登录表单j_security_checkj_username等等。WAS 被配置为使用安全性(使用本地操作系统),并且 webapp 角色映射到应用程序领域中的 All Authenticated

登录作品:

简而言之,上述配置有效:如果我访问安全页面 ( /secure/index.html),WAS 会显示登录表单(如果尚未登录),我可以在其中输入我的用户名和密码并继续执行;调用 EJB 并获取主体,打印出我的用户名。正如预期的那样。

登录后访问不安全的资源

但是,如果我访问不安全的 servlet ( /index.html),EJB *无法获取调用者主体并打印出:UNAUTHENTICATEDfor user name。无论我是否登录,都会发生这种情况。

问题

在当前会话期间,在身份验证后访问不安全的 url 时,我能否以某种方式获取调用者主体?

我不确定 JAAS 是否在规范中定义了这个用例?或者我应该手动处理这个(例如使用会话并将调用者主体注入线程本地)。

4

1 回答 1

1

您可能应该更改 Web 身份验证的默认行为,即不为未受保护的 URL 提供身份验证数据。应启用“访问未受保护的 URI 时使用可用的身份验证数据”选项。

在此处输入图像描述

总的来说,我强烈建议阅读WebSphere Application Server V7.0 安全指南,以了解 WAS 中的安全性如何工作。

于 2013-08-01T14:59:28.493 回答