为了账号安全,请及时绑定邮箱和手机立即绑定

Wss4jSecurityInterceptor - 我的自定义回调被解释为

Wss4jSecurityInterceptor - 我的自定义回调被解释为

子衿沉夜 2022-06-23 10:18:54
我正在使用 Java 8 和 Spring Boot 制作一个项目,我想在其中添加 Wss4jSecurityInterceptor 以进行登录。到目前为止,这是我在 WebServiceConfig 类中所做的@Beanpublic AuthorizationCallBackHandler authorizationCallBackHandler(){    AuthorizationCallBackHandler callbackHandler = new AuthorizationCallBackHandler();    return callbackHandler;}@Beanpublic Wss4jSecurityInterceptor securityInterceptor(){    Wss4jSecurityInterceptor securityInterceptor = new Wss4jSecurityInterceptor();    securityInterceptor.setValidationActions("UsernameToken");    securityInterceptor.setValidationCallbackHandler(authorizationCallBackHandler());    return securityInterceptor;}    @Override    public void addInterceptors(List interceptors) {        interceptors.add(securityInterceptor());        //interceptors.add(endPointInterceptor());    }因此,这样,到达我的 Web 服务的每个请求都将被 Wss4jSecurityInterceptor 拦截,并由我的自定义回调处理,定义如下public class AuthorizationCallBackHandler implements CallbackHandler{    private final Logger logger = LoggerFactory.getLogger(this.getClass());    @Autowired    VnWsCredentialRepository credentialsRepo;    @Autowired    AuthUtility authUtil;    @Override    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {        if (callbacks[0] instanceof WSPasswordCallback) {            WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];            String username = pc.getIdentifier();            VnWsCredential credentials = credentialsRepo.findByUsername(username);            logger.info("Request of authentication for username" + username);            String p =              pc.getPassword();            // set the password on the callback. This will be compared to the            // password which was sent from the client.            if (credentials == null) {                pc.setPassword(null);这是我的问题:当 Callback 被调用时,它会收到一个数组,该数组只包含 1 个具有“CleanupCallback”类型的回调,当然,我不能用它做任何事情。我在以下设置中缺少什么?
查看完整描述

1 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

对于任何感兴趣的人,我首先通过从请求中删除标题中的内容来解决这个问题。
之后,我使用凭据设置了一个传出 WSS,就像这样,Wss4j 安全处理程序将回调转换为我想要的实例(即 WSPasswordCallback)。
经验教训:如果 Wss4j 在处理 SOAP 请求时检测到某种错误,它将生成 CleanupCallback 而不是 WSPasswordCallback 的实例

查看完整回答
反对 回复 2022-06-23
  • 1 回答
  • 0 关注
  • 146 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信