我开发了一个安全认证模块 (SAM) 并实现了该validateRequest
方法。我还有一个简单的 webapp 配置为使用这个 SAM。
在我的validateRequest
方法中,我检查了 clientSubject 并设置了CallerPrincipalCallback
一个硬编码的用户名和一个GroupPrincipalCallback
硬编码的组名:
final CallerPrincipalCallback callerPrincipalCallback = new CallerPrincipalCallback(clientSubject, "anonymous");
final GroupPrincipalCallback groupPrincipalCallback = new GroupPrincipalCallback(clientSubject, new String[] {"user"});
try {
this.handler.handle(new Callback[] {callerPrincipalCallback, groupPrincipalCallback});
} catch (IOException | UnsupportedCallbackException e) {
logger.error(e.getMessage());
}
我注意到每次在我的 web 应用程序中刷新 servlet 时,客户端主题都是空白的,logger.debug("Client: {}", clientSubject);
:
2015-05-05 11:21:02,200 DEBUG n.m.j.s.Saml2AuthModule [http-listener-1(2)] Client: Subject:
是否可以以某种方式“保存”一个主题,以便将该主题附加到会话中,并且我每次都可以简单地跳过登录同一个用户?
编辑我想我找到了一种方法,方法是手动将其存储在HttpSession
:req.getSession().setAttribute("subject", user);
不漂亮,但它有效。