当前位置: 首页 > 工具软件 > WSS4J > 使用案例 >

有关于 WSS4J加密

许安邦
2023-12-01
首先来段百度百科

WSS4J

WSS4J实现了WS-Security,是AXIS的安全模块,但也可以用于其他Web Services框架(例如XFIRE,CXF)。
WSS4J在Web Services框架中以handler方式工作,在发送SOAP消息前进行签名、加入认证凭据和加密,在收到SOAP消息后进行解密、认证和验证签名等安全工作。使用者可以自己编写handler处理SOAP消息以保证安全。


前段时间在编写cxf rest的时候需要用到一个加密框架,于是用到的WSS4j ,关于wss4j的资料相对于其他比较少,

关于对加密无非是两件事情:

  1. 认证 WS 请求
  2. 加密 SOAP 消息

1. 基于用户令牌的身份认证

1,首先,当然是导入包

添加 CXF 提供的 WS-Security 的 Maven 依赖

2,在cxf.xml中配置

  <bean id="wss4jInInterceptor" class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor">
        <constructor-arg>
            <map>
                <!-- 用户认证(明文密码) -->
                <entry key="action" value="UsernameToken"/>
                <entry key="passwordType" value="PasswordText"/>
                <entry key="passwordCallbackRef" value-ref="serverPasswordCallback"/>
            </map>
        </constructor-arg>
    </bean>
WSS4JInInterceptor 是一个 InInterceptor,表示对输入的消息进行拦截,同样还有 OutInterceptor,表示对输出的消息进行拦截
  • action = UsernameToken:表示使用基于“用户名令牌”的方式进行身份认证
  • passwordType = PasswordText:表示密码以明文方式出现
  • passwordCallbackRef = serverPasswordCallback:需要提供一个用于密码验证的回调处理器
关于拦截的实现

@Component
public class ServerPasswordCallback implements CallbackHandler {

    private static final Map<String, String> userMap = new HashMap<String, String>();

    static {
        userMap.put("client", "clientpass");
        userMap.put("server", "serverpass");
    }

    @Override
    public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {
        WSPasswordCallback callback = (WSPasswordCallback) callbacks[0];

        String clientUsername = callback.getIdentifier();
        String serverPassword = userMap.get(clientUsername);

        if (serverPassword != null) {
            callback.setPassword(serverPassword);
        }
    }
}
下一步在去完成配置



 类似资料: