在成功进行JAAS登录(WebSphere 7)后访问使用EJB的不安全资源

时间:2013-08-01 13:20:49

标签: ejb websphere websphere-7 jaas

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

更多细节如下。

EJB:

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

ctx.getCallerPrincipal().getName();

web应用:

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

登录有效:

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

登录后访问不安全的资源

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

问题

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

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

1 个答案:

答案 0 :(得分:1)

您可能应该更改Web身份验证的默认行为,而不是为不受保护的URL提供身份验证数据。

应启用“在访问不受保护的URI时使用可用的身份验证数据”选项

enter image description here

总的来说,我强烈建议您阅读WebSphere Application Server V7.0 Security Guide,了解安全性如何在WAS中发挥作用。