Jaspic:处理对不受保护资源的访问

时间:2016-07-22 23:05:35

标签: java-ee jaspic

我正在学习JASPIC,我从头开始一个小项目来探索它以及它在Wildfly上的表现。第一步是调用我的SAM validateRequest方法并返回未受保护资源的内容index.html页面。好的,调用了validateRequest。我检查MessageInfo javax.security.auth.message.MessagePolicy.isMandatory属性是否设置为false。困难时期到来了。在我的第一次尝试中,如果property设置为false validateRequest返回AUTH_SUCCESS值,但浏览器会返回403错误。在我的第二次尝试validateRequest返回null时,浏览器返回200,但响应中没有数据(没有关于index.html)。我该怎么做才能正确处理servlet请求? 您可以找到来源here。感谢。

1 个答案:

答案 0 :(得分:3)

  

我该怎么做才能正确处理servlet请求?

理解并遵守specification的相关部分。对于典型的面向Servlet的ServerAuthModule(SAM),它们是:

  • 服务器端消息处理模型的通用概述(第2点是validateRequest被调用的地方),由第1.2.5节和第2.1.5.2节提供。后面的版本以及第25页的模型状态图(PDF中的第39页)特别重要。
  • HTTP Servlet容器配置文件对上述内容的专业化,可在第3.8.3.2节,第3.8.4节和第3.9节中找到。

当然,既然您也实施了工厂,那么您应该注意的是一些具有不同意义的其他细节,因此您可能更难以避免阅读前三章中的内容。他们的全部。

SUCCESS

返回validateRequest

每当您的SAM的validateRequest实施要返回AuthStatus.SUCCESSnull 选项)时,必须无论调用者实际已经过身份验证还是匿名调用,都会在返回之前将调用者的身份传递给(Servlet)运行时。这可以通过运行时提供的CallerPrincipalCallback处理GroupPrincipalCallback和/或至少一个CallbackHandler(可以将组分配给匿名调用者)来实现。使用null Principal(name)参数构造这些回调中的任何一个都会向运行时发出信号,表示调用者将被视为匿名,或者没有任何组与之关联。再次注意,默认的调用者默认假设是由兼容的运行时做出的;必须明确告知,否则结果不明确。

SUCCESS的语义是允许请求传播到(基于Servlet的)服务端点, iff 基于组(基于角色)的调用者授权成功。但是,为了进行授权,必须使运行时知道调用者的身份,这就是上述回调是必要的原因。

AuthStatus值与HTTP响应状态代码

两者之间的关系可能有点令人困惑。前者是协议中立的,基本上是消息处理模型中的状态转换标签。理论上他们限制了后者;实际上,由于多个组件和应用程序服务器本身可能会改变响应的状态,因此建议您自己在非AuthStatus.SUCCESS / AuthStatus.SEND_SUCCESS validateRequest / secureResponse中进行分配。返回案件。