마지막으로 나는 내가 원하는 것을 할 수있는 방법을 정립 할 수있었습니다. 솔루션 포인트를 현명하게 나열하겠습니다 :
암호로는 불가능합니다. CallBackHandler는 축으로 MessageContext에 대한 액세스 권한을 부여하지 않습니다.
해결 방법은 org.apache.axis2.handlers.AbstractHandler를 확장하는 사용자 정의 처리기 클래스를 만드는 것입니다. 필자의 경우 SAML2 보안 토큰이 있었기 때문에, 처리기를 'InFlow'단계에서 '보안 후 단계'라고 부르기를 원했습니다. 이렇게하면 보안 헤더가 보안 단계를 통과했는지 확인할 수 있습니다. 핸들러 클래스는 매개 변수로 MessageContext를 갖는 invoke 메소드를 가진다. MessageContext는 전체 SOAPEnvelope 및 그 내용에 대한 액세스를 제공합니다.
public class LIMSConHandler extends AbstractHandler {
private Log LOG = LogFactory.getLog(LIMSConHandler.class);
public InvocationResponse invoke(MessageContext ctx) throws AxisFault {
//following code gives you access to the soapEnvelope
SOAPEnvelope msgEnvelope = ctx.getEnvelope();
SOAPHeader msgHeader = msgEnvelope.getHeader();
//add your logic to extract the security header and SAML assertion
return InvocationResponse.CONTINUE;
}
바인딩
<phaseOrder type="InFlow">
.........
<phase name="Security"/>
<phase name="PostSecurity">
<handler name="LIMSConHandler" class="labware.web.ws.control.LIMSConHandler"/>
내가 입력을 환영 axis2.xml의 '후 보안'사용자 정의 단계로이 핸들러 : 다음은 당신이 만들 수 골격 코드 이에.
답변이 게시되지 않았으므로 지금까지 조사 결과를 추가하고 있습니다. PasswordCallBack에서 내가하고 싶은 일은 불가능한 것 같습니다. RampartConfig.java 클래스를 살펴 보았습니다. 이것은 제공되지 않습니다. 누군가가 필요로 할 경우에 대비하여 내 전략을 올릴 것입니다. – Vish