CXF利用过滤器实现身份验证
来源:互联网 发布:淘宝越来越难做了 编辑:程序博客网 时间:2024/05/22 15:10
< 本文建立在上篇文章基础之上 >
编写服务器端用户验证WsAuthHandler.java类
package Interceptor;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.ws.security.WSPasswordCallback;public class WsAuthHandler implements CallbackHandler {public void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException {System.out.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ COME IN @@@@@@@@@@@@@@");for (int i = 0; i < callbacks.length; i++) {WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];String identifier = pc.getIdentifier();int usage = pc.getUsage();if (usage == WSPasswordCallback.USERNAME_TOKEN) {pc.setPassword("testPassword");} else if (usage == WSPasswordCallback.SIGNATURE) {pc.setPassword("testPassword");}}}}
进行发布服务
<jaxws:server id="userService" serviceClass="com.IComplexUserService"address="/userService"><!-- 指向实现类 --><jaxws:serviceBean><ref bean="userServiceBean" /></jaxws:serviceBean><!--进入web service之前用户验证的拦截器--><jaxws:inInterceptors><bean class="org.apache.cxf.binding.soap.saaj.SAAJInInterceptor" /><bean class="org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor"><constructor-arg><map><!-- 设置加密类型 --><entry key="action" value="UsernameToken" /><!-- 设置密码类型为明文 --><entry key="passwordType" value="PasswordText" /><!--<entry key="action" value="UsernameToken Timestamp" />设置密码类型为加密<entry key="passwordType" value="PasswordDigest" />--><entry key="passwordCallbackClass" value="Interceptor.WsAuthHandler" /></map></constructor-arg></bean></jaxws:inInterceptors></jaxws:server>
客户端编写WsClinetAuthHandler.java类记性验证
package com.client;import java.io.IOException;import javax.security.auth.callback.Callback;import javax.security.auth.callback.CallbackHandler;import javax.security.auth.callback.UnsupportedCallbackException;import org.apache.ws.security.WSPasswordCallback;public class WsClinetAuthHandler implements CallbackHandler {public void handle(Callback[] callbacks) throws IOException,UnsupportedCallbackException {for (int i = 0; i < callbacks.length; i++) {WSPasswordCallback pc = (WSPasswordCallback) callbacks[i];System.out.println("identifier: " + pc.getIdentifier());// 这里必须设置密码,否则会抛出:java.lang.IllegalArgumentException: pwd == null// but a password is neededpc.setPassword("testPassword");//这里必须设置密码}}}
调用服务
package com.client;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import org.apache.cxf.binding.soap.interceptor.SoapInterceptor;import org.apache.cxf.binding.soap.saaj.SAAJOutInterceptor;import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;import org.apache.ws.security.WSConstants;import org.apache.ws.security.handler.WSHandlerConstants;public class UserAccess {public List UserAccess(String username, String password) {// 以下和服务端配置类似,不对,应该说服务端和这里的安全验证配置一致Map<String, Object> outProps = new HashMap<String, Object>();outProps.put(WSHandlerConstants.ACTION,WSHandlerConstants.USERNAME_TOKEN);outProps.put(WSHandlerConstants.USER, username);outProps.put(WSHandlerConstants.PASSWORD_TYPE, WSConstants.PW_TEXT);// 指定在调用远程ws之前触发的回调函数WsClinetAuthHandler,其实类似于一个拦截器outProps.put(WSHandlerConstants.PW_CALLBACK_CLASS,WsClinetAuthHandler.class.getName());ArrayList<SoapInterceptor> list = new ArrayList<SoapInterceptor>();// 添加cxf安全验证拦截器,必须list.add(new SAAJOutInterceptor());list.add(new WSS4JOutInterceptor(outProps));return list;}}
OK这是实现了用户的验证
- CXF利用过滤器实现身份验证
- cxf webservice身份验证
- 利用FilenameFilter实现图片过滤器
- 利用过滤器实现全局编码
- 利用cxf实现webservice完整demo
- java利用CXF实现WebService 实例
- 利用IPsec实现网络安全之五(Kerveros实现身份验证)
- 利用SQLSERVER存储过程实现ASP用户身份验证
- 利用SQLSERVER存储过程实现ASP用户身份验证
- 利用过滤器实现request的编码转换
- Java 利用过滤器Filter 实现登录过滤
- 利用过滤器实现字符编码的控制
- 利用Java过滤器实现清理浏览器缓存
- asp.net mvc5 身份验证过滤器
- 过滤器可以实现用户身份验证的功能,如果用户没有登录,则跳转到登陆页面:
- Spring身份验证+CXF拦截器+RESTful
- CXF实现
- 利用STP开发CXF
- Linux awk 命令 说明
- 蒙迪欧致胜豪华版钥匙没电了怎么启动汽车?
- Linux下Java程序调用Openssl命令实现内存中加密数据
- ios 弱引用
- C语言输入输出经典题
- CXF利用过滤器实现身份验证
- ACM主要内容
- poj 3304 Segments(判断直线与线段相交)
- hdu4324-Triangle LOVE-2012 Multi-University Training Contest题解
- 2012.8.1总结
- JasperReport入门一 设置开发环境
- 【专题属性】线段树
- PCL库初步使用(1):小试牛刀
- 数据库笔记七——索引