SAM的CallbackHandler
是你的烦恼的原因。
首先it.jaspic.sec.TokenConfigProvider
无视运行时传递给它的处理程序:
public ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) throws AuthException {
return serverAuthConfig;
}
然后it.jaspic.sec.TokenServerConfig
使用其自己的处理程序,基本上什么也不做:
public TokenServerConfig() throws AuthException {
// ...
handler = new CallbackHandler() {
@Override
public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
// just logs its arguments
}
};
}
因此,it.jaspic.sec.TokenSAM#validateRequest
是无法沟通的调用者的身份到运行时。由于它仍然错误地返回AuthStatus.SUCCESS
,但至少就JASPIC而言,从那时起,它几乎是未定义的行为。有趣的是,好像Servlet容器在这种情况下试图让双方都满意,一方面表示SAM的AuthStatus
表示认证消息交换成功,另一方面表示应用程序的<security-constraint>
。诚然,401
,0 403
,或者更好的是,500
响应 - 表示认证机制不服从其合同 - 可能不太令人困惑。
显而易见的解决方案是将运行时提供的处理程序传递给SAM。 API显然没有多大帮助,但对于单个消息层/单个应用程序/单个身份验证机制用例,仅当运行时第一次请求该处理程序时,应该足够简单地实例化ServerAuthConfig
和处理程序一个getServerAuthConfig
调用:
public synchronized ServerAuthConfig getServerAuthConfig(String layer, String appContext, CallbackHandler handler) {
if (serverAuthConfig == null) {
serverAuthConfig = new TokenServerConfig(handler);
}
return serverAuthConfig;
}
,当然,上述所谓的(只具有存储处理程序参数)新的构造已经被引入到it.jaspic.sec.TokenServerConfig
。
这两个更改应呈现/services/user/userA
端点可访问。
来源
2016-08-19 12:08:49
Uux
请提供更多信息,例如响应的状态(如果您收到一个)和任何相关的日志条目。另外,我怀疑你需要''web.xml'中的''元素。 –
Uux